Updating with latest loxi including openflow1.5 ONOS-4770

Squashed commit of the following from upstream loxigen:

commit 72569023213f58dc45b4ea0af769d32845ee8b58
Merge: 0f662f2 52d95e1
Author: abat <abat@bigswitch.com>
Date:   Thu Apr 13 15:49:25 2017 -0700

    Merge into master from pull request #547:
    [SWL-3678] Add a new TLV force_link_up for port_config gentable (https://github.com/floodlight/loxigen/pull/547)

commit 52d95e118b2ef0f393f5bf1ab48d91bd625d332d
Author: Nick Wang <ning.wang@bigswitch.com>
Date:   Thu Apr 13 15:34:23 2017 -0700

    SWL-3678 Add a new TLV force_link_up for port_config gentable

commit 0f662f260c86ef8f5a5ac0f7acf34efd4a40dd8d
Merge: f413699 8297c58
Author: abat <abat@bigswitch.com>
Date:   Mon Apr 10 16:09:51 2017 -0700

    Merge into master from pull request #546:
    push-artifacts: make MAKE configurable (https://github.com/floodlight/loxigen/pull/546)

commit 8297c58f420e4e87fee4ece81cc7aec408e4dc2f
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Mon Apr 10 15:57:03 2017 -0700

    push-artifacts: make MAKE configurable

commit f413699f0938bf6a9e538678ec84800d7da22231
Merge: 112202d 8d54bdf
Author: Nick Wang <ning.wang@bigswitch.com>
Date:   Thu Mar 30 20:28:53 2017 -0700

    Merge pull request #544 from nick-bsn/port_config_fec

    [SWL-3678] Add two new TLVs for port_config gentable

commit 8d54bdf22e2c19710d1340af62117fbdf3e20cb8
Author: Nick Wang <ning.wang@bigswitch.com>
Date:   Thu Mar 30 15:24:04 2017 -0700

    SWL-3678 Add two new TLVs for port_config gentable

commit 112202d8ec23aa63bc1a503980733dc3619bd6e9
Merge: f0361bb 67be9bc
Author: abat <abat@bigswitch.com>
Date:   Wed Mar 15 10:28:46 2017 -0700

    Merge into master from pull request #543:
    SWL-3685: Add new TLV types for router_ip table and prefix table flag (https://github.com/floodlight/loxigen/pull/543)

commit 67be9bc13f23577b6eb48758dd90f1a56d8745ec
Author: akshata <akshata.danivasa@bigswitch.com>
Date:   Tue Mar 14 15:08:08 2017 -0700

    SWL-3685: Add new TLV types for router_ip table and prefix table flag

commit f0361bb84bd48ab48aac8f3c0b0e91c9c762acc4
Merge: 70334a1 aa5cd7d
Author: abat <abat@bigswitch.com>
Date:   Thu Mar 9 13:17:51 2017 -0800

    Merge into master from pull request #541:
    Add new tlv for loopback_mode (https://github.com/floodlight/loxigen/pull/541)

commit aa5cd7d179a1416903141b73e6be527bb57ce73e
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Mon Mar 6 22:23:27 2017 -0800

    Make loopback mode an enumeration

commit 64f5fc63dad97088f75b8a31cd122ca8dfbce74a
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Thu Feb 23 16:06:02 2017 -0800

    Add new tlv for loopback_mode

commit 70334a12d2553424df9b3c3176110b1ec20e7664
Merge: 837577c 735ef07
Author: abat <abat@bigswitch.com>
Date:   Fri Feb 10 11:25:22 2017 -0800

    Merge into master from pull request #540:
    SWL-3343 hash_algorithm TLV. (https://github.com/floodlight/loxigen/pull/540)

commit 735ef074e5c1b33823dc563884e23ed41aa7d6a9
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Fri Feb 10 10:19:02 2017 -0800

    SWL-3343 hash_algorithm TLV.

    Controller can tell switch about what hash algorithm to be
    used for LAG/ECMP member selection.

commit 837577c27d30d4ce81a962e290bc166fd83be3fe
Merge: 22b8fc7 9bc2c19
Author: abat <abat@bigswitch.com>
Date:   Tue Feb 7 16:08:47 2017 -0800

    Merge into master from pull request #538:
    Update Maven Dependencies (https://github.com/floodlight/loxigen/pull/538)

commit 9bc2c19df94d540f1de1af770b0edf8fb3c0402c
Author: Sovietaced <Sovietaced@gmail.com>
Date:   Tue Feb 7 13:07:20 2017 -0800

    Roll back Guava since it is the last version compatible with Java7

commit 62dbf76291a0f401b761c404fe0b3453913cc614
Author: Sovietaced <Sovietaced@gmail.com>
Date:   Tue Feb 7 11:40:58 2017 -0800

    Update findbugs

commit fd987bfecfa2162e02de63ad45be873f605172dd
Author: Sovietaced <Sovietaced@gmail.com>
Date:   Tue Feb 7 11:40:18 2017 -0800

    Update slf4j

commit 56c5e647c1653274e3171f7be5752b6e5dfd28c8
Author: Sovietaced <Sovietaced@gmail.com>
Date:   Tue Feb 7 11:38:51 2017 -0800

    Update logback

commit 461635fcee31335446a16ef2d0a0c3aaf83f4b1e
Author: Sovietaced <Sovietaced@gmail.com>
Date:   Tue Feb 7 11:38:11 2017 -0800

    Update guava

commit 22b8fc7d1ba4c5571e1d6580a9d0b3b4cd423f3d
Merge: f5356c1 18a2032
Author: abat <abat@bigswitch.com>
Date:   Tue Feb 7 10:10:51 2017 -0800

    Merge into master from pull request #536:
    Add Intel port stats experimenter property. (https://github.com/floodlight/loxigen/pull/536)

commit f5356c139dad035ba1be617d97a6313e6b298d15
Merge: 8da6520 183049d
Author: abat <abat@bigswitch.com>
Date:   Tue Feb 7 09:34:49 2017 -0800

    Merge into master from pull request #535:
    java/pom.xml: bump version to 3.2.0-SNAPSHOT for new dev cycle (https://github.com/floodlight/loxigen/pull/535)

commit 18a2032ccbd9c5d852643034f23862eb8a9f5e7e
Merge: 8da6520 6180b36
Author: Geddings Barrineau <cbarrin@g.clemson.edu>
Date:   Tue Feb 7 09:07:45 2017 -0500

    Merge branch 'intel'

commit 6180b362d508238417d167083084e7a02344e3d0
Author: Geddings Barrineau <cbarrin@g.clemson.edu>
Date:   Tue Feb 7 09:02:54 2017 -0500

    Added support for an Intel made port stats experimenter property.

    The extension can be located here:
    https://github.com/openvswitch/ovs/blob/75e2077e0c43224bcca92746b28b01a4936fc101/include/openflow/intel-ext.h

commit 183049d8c578b48e67d9e77c1366a8185a0914b9
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Wed Feb 1 18:30:26 2017 -0800

    java/pom.xml: bump version to 3.2.0-SNAPSHOT for new dev cycle

commit 8da6520d48be36dc136831eaae0f68500086e3f1
Merge: ce3330f 3f49d4d
Author: abat <abat@bigswitch.com>
Date:   Sat Jan 28 11:41:32 2017 -0800

    Merge into master from pull request #533:
    Add of_bsn_gentable_error and of_bsn_gentable_full_error. (https://github.com/floodlight/loxigen/pull/533)

commit 3f49d4dafdbaf977183b3927e314335a9287f8e7
Author: Ken Chiang <ken.chiang@bigswitch.com>
Date:   Fri Jan 27 13:28:47 2017 -0800

    Retain only of_bsn_gentable_error with error_code field to indicate various gentable errors.

commit 7775b51fd8be88b266779abacacceb5194311b67
Author: Ken Chiang <ken.chiang@bigswitch.com>
Date:   Fri Jan 27 11:45:29 2017 -0800

    Add of_bsn_gentable_error and of_bsn_gentable_full_error.

commit ce3330fbc863cea533465eabbba51ebc19f9ecbb
Merge: 96cf1f4 8862e21
Author: abat <abat@bigswitch.com>
Date:   Mon Dec 5 16:39:33 2016 -0800

    Merge into master from pull request #530:
    Add tri-valued tlv for auto negotiation (https://github.com/floodlight/loxigen/pull/530)

commit 8862e21936d5834e166c5660fffc68bae55c3350
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Mon Dec 5 14:29:31 2016 -0800

    Add tri-valued tlv for auto negotiation

commit 96cf1f4858e60077cc24bce02e45a79db3192e06
Merge: afa83b4 d900032
Author: abat <abat@bigswitch.com>
Date:   Wed Nov 30 11:41:40 2016 -0800

    Merge into master from pull request #528:
    Add custom port description property for FEC. (https://github.com/floodlight/loxigen/pull/528)

commit d90003256352f5ea1f17aa91aff0f33fa4ffe7bb
Author: Wilson Ng <wilson.ng@bigswitch.com>
Date:   Wed Nov 30 11:34:54 2016 -0800

    Add comments.

commit 438865fea9041947cd7daef468bf6117b43156e1
Author: Wilson Ng <wilson.ng@bigswitch.com>
Date:   Wed Nov 30 11:16:24 2016 -0800

    Add custom port description property for FEC.

commit afa83b45684821fb3fdf1319256c04b57175d4b5
Merge: 07bc822 d05e851
Author: abat <abat@bigswitch.com>
Date:   Tue Nov 29 17:14:33 2016 -0800

    Merge into master from pull request #527:
    SWLVX-5 Create new pktin flag for INGRESS_ACLs with OFPP_LOCAL in action. (https://github.com/floodlight/loxigen/pull/527)

commit d05e85154a046212c959895d5b419d96c4bafd8c
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Mon Nov 28 22:13:37 2016 -0800

    SWLVX-5 Create new pktin flag for INGRESS_ACLs with OFPP_LOCAL in action.

commit 07bc822c58534c2c716a3df0d6d53dd0194f3513
Merge: 7e49dd3 c5c39d2
Author: abat <abat@bigswitch.com>
Date:   Mon Nov 21 17:13:32 2016 -0800

    Merge into master from pull request #526:
    Fix IPv6Address.toString to conform to RFC 5952 standard canonical string rep (https://github.com/floodlight/loxigen/pull/526)

commit c5c39d2860c6536ef3cfa24828f39020c261bc93
Author: Rob Vaterlaus <rob.vaterlaus@bigswitch.com>
Date:   Mon Nov 21 16:39:44 2016 -0800

    Bump the version since the change to IPv6Address.toString affects clients

commit 140cd0be3eef94a0929e27c823aafe03d5536e07
Author: Rob Vaterlaus <rob.vaterlaus@bigswitch.com>
Date:   Mon Nov 21 05:40:47 2016 -0800

    Fix IPv6Address.toString to conform to RFC 5952 standard canonical string rep

    - if there are multiple equal length zero runs zero compress the first one,
      not the last one
    - don't zero compress a single zero

commit 7e49dd307185f0749526cf75e962d9e9e9c109d3
Merge: f62a27b f21714e
Author: abat <abat@bigswitch.com>
Date:   Sat Oct 29 02:19:16 2016 -0700

    Merge into master from pull request #525:
    Add tunnel and enhanced hash capabilities. (https://github.com/floodlight/loxigen/pull/525)

commit f21714ee7789b6685288e46cf03af3894ad904b3
Author: Ken Chiang <ken.chiang@bigswitch.com>
Date:   Fri Oct 28 15:25:49 2016 -0700

    Add tunnel and enhanced hash capabilities.

commit f62a27b1537d0aa9cf750593d91a59cd2fbb492d
Merge: 44a2ad8 7109be5
Author: abat <abat@bigswitch.com>
Date:   Thu Oct 27 14:51:36 2016 -0700

    Merge into master from pull request #524:
    Add port_usage tlv (https://github.com/floodlight/loxigen/pull/524)

commit 7109be575e37d88ef044e81bb30c3acc1e831c1e
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Tue Oct 25 18:41:10 2016 -0700

    Add port_usage tlv

commit 44a2ad814688d73d58ffdf7aa3163c1a5c3d02b4
Merge: 4fd5ee4 ff439f9
Author: abat <abat@bigswitch.com>
Date:   Mon Oct 17 08:07:45 2016 -0700

    Merge into master from pull request #523:
    Add IP fragmentation OXM (https://github.com/floodlight/loxigen/pull/523)

commit ff439f99a4d1ab868bc676a8f2128faee30cf0bf
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Mon Oct 17 10:57:25 2016 -0400

    Replace tabs with spaces

commit 9389d52dcb91850bb202a66026876ed604b89c55
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Sat Oct 15 11:39:18 2016 -0400

    Specify Java type conversion for masked. Doesn't make sense to have support for this OXM, Loxi seems upset if we leave it out

commit 15f7993dccdcb545afbeee32e2316e19fbbeb7d7
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Sat Oct 15 10:51:38 2016 -0400

    Correct length is 1 byte

commit 5e707837ad186b0c593772441cc8d19cf32699f7
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Fri Oct 14 20:18:01 2016 -0400

    Add IP fragmentation OXM

commit 4fd5ee4e74ed26f03eb2b56111e31387f39f034a
Merge: 477a6e5 9365a3d
Author: abat <abat@bigswitch.com>
Date:   Wed Oct 5 15:03:41 2016 -0700

    Merge into master from pull request #522:
    Add data_mask tlv. (https://github.com/floodlight/loxigen/pull/522)

commit 9365a3da967816058273c3755c2d5a68ae470ad0
Author: Wilson Ng <wilson.ng@bigswitch.com>
Date:   Wed Oct 5 15:10:05 2016 -0700

    Add data_mask tlv.

commit 477a6e546f2bbb76ced7b5a7bf57f238cacff925
Merge: 72ee071 7950ce7
Author: abat <abat@bigswitch.com>
Date:   Tue Oct 4 13:16:40 2016 -0700

    Merge into master from pull request #521:
    Update version of slf4j (https://github.com/floodlight/loxigen/pull/521)

commit 7950ce7052ddbeb9781c247a293dae6383a48942
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Tue Oct 4 13:07:44 2016 -0700

    Update slf4j-api to 1.7.21

commit 3d17b95dd8dac3a7b183e9f9dcae5bf6f90f785b
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Mon Oct 3 19:52:32 2016 -0700

    Update version of slf4j

commit 72ee071cae07406559f00f4a7093ada73160d352
Merge: 495d66f cafcda7
Author: abat <abat@bigswitch.com>
Date:   Tue Sep 20 13:57:46 2016 -0700

    Merge into master from pull request #520:
    SWL-3216 IPV6 address pretty_print function. (https://github.com/floodlight/loxigen/pull/520)

commit cafcda786b18d4a6f6d8241e0ff5c469d5923d00
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Tue Sep 20 11:22:55 2016 -0700

    SWL-3216 IPV6 address pretty_print function.

commit 495d66faf0157adb8361adc9a36df8af7ac0cc59
Merge: 2dead4f ec5921b
Author: abat <abat@bigswitch.com>
Date:   Thu Sep 15 12:44:25 2016 -0700

    Merge into master from pull request #519:
    New TLVs ingress_port_group_id, ingress_port_group_id. (https://github.com/floodlight/loxigen/pull/519)

commit ec5921b94a0de4a6576f93dee149cb86e3793ff7
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Thu Sep 15 12:01:47 2016 -0700

    New TLVs ingress_port_group_id, ingress_port_group_id.

commit 2dead4fcabca346e04c0d995e762c09e3751b1eb
Merge: a97ee19 a5cece6
Author: abat <abat@bigswitch.com>
Date:   Thu Sep 8 14:25:38 2016 -0700

    Merge into master from pull request #518:
    Add egress_only tlv (https://github.com/floodlight/loxigen/pull/518)

commit a5cece6ad5e7b981193b729af20cce6955cc3b02
Author: harshsin <harshmeet.singh@bigswitch.com>
Date:   Thu Sep 8 14:07:03 2016 -0700

    Add egress_only tlv

commit a97ee19a59ed7a9c302ccdf84b3023ec18a00c71
Merge: 7821095 b4ecc4a
Author: abat <abat@bigswitch.com>
Date:   Tue Sep 6 11:36:00 2016 -0700

    Merge into master from pull request #517:
    Add eth_type, ecn, tcp_flags, l3 interface class id, l3 src class id, and l3 dst class id TLVs (https://github.com/floodlight/loxigen/pull/517)

commit 78210955ca556a7f3428955c159c82c7cc3150ca
Merge: 424a68b 6f190cb
Author: abat <abat@bigswitch.com>
Date:   Mon Sep 5 07:05:40 2016 -0700

    Merge into master from pull request #512:
    add tcp_flags (https://github.com/floodlight/loxigen/pull/512)

commit 6f190cb9e7c8bad2e39300bad99b10ac4bfa1b52
Author: aweally <fangtuo90@gmail.com>
Date:   Mon Sep 5 21:38:12 2016 +0800

    fix grammar error (missing comma)

commit b4ecc4a13b7d90a9a27fd11c4681c3bfe7bdbed2
Author: Ken Chiang <ken.chiang@bigswitch.com>
Date:   Fri Sep 2 16:16:44 2016 -0700

    Add eth_type, ecn, tcp_flags, l3 interface class id, l3 src class id,
    and l3 dst class id TLVs.

commit 424a68bb1472eb3f2f3e29b4016fc01d97d0b15a
Merge: 2ffc6dc f15e725
Author: abat <abat@bigswitch.com>
Date:   Wed Aug 31 11:27:45 2016 -0700

    Merge into master from pull request #516:
    Update description of apply_packets/apply_bytes (https://github.com/floodlight/loxigen/pull/516)

commit f15e7250aaf5d891ed4e94b62548dee23152b8ce
Author: mstolarchuk <mike.stolarchuk@bigswitch.com>
Date:   Wed Aug 31 11:24:37 2016 -0700

    Update description of apply_packets/apply_bytes

commit 2ffc6dc20afeb9920b499fabd900e3a1d0fedfa8
Merge: 6d6c9d0 6468117
Author: michael stolarchuk <mike.stolarchuk@bigswitch.com>
Date:   Wed Aug 31 10:05:20 2016 -0400

    Merge pull request #515 from 3mp4y5/master

    Add apply packets/bytes to use for gentab status replies

commit 6468117b6b36bc78e7cff9804a4146d017d4d08d
Author: mstolarchuk <mike.stolarchuk@bigswitch.com>
Date:   Wed Aug 31 06:54:39 2016 -0700

    provide doc for apply packets/bytes

commit 03089f8242154cab3d56ed770672f2c4f64ef046
Author: mstolarchuk <mike.stolarchuk@bigswitch.com>
Date:   Sun Aug 28 15:34:52 2016 -0700

    Add apply packets/bytes to use for gentab status replies

commit 6d6c9d0d960b123d526fa4e773793b7fa0063be8
Merge: 0ae6371 c765ddb
Author: abat <abat@bigswitch.com>
Date:   Fri Aug 26 17:16:40 2016 -0700

    Merge into master from pull request #514:
    Add TLV: push_vlan_on_ingress. (https://github.com/floodlight/loxigen/pull/514)

commit c765ddba3585ca87832cb8095e25fc9de35effbe
Author: Wilson Ng <wilson.ng@bigswitch.com>
Date:   Fri Aug 26 17:17:13 2016 -0700

    Add TLV: push_vlan_on_ingress.

commit 0ae637139666c2addde65dbeaa6db366f57e820c
Merge: fcffa3c 34605db
Author: abat <abat@bigswitch.com>
Date:   Thu Aug 25 13:52:21 2016 -0700

    Merge into master from pull request #513:
    Add bsn_hash_select instruction. (https://github.com/floodlight/loxigen/pull/513)

commit 34605db099434a59560bcdc4204885a2aed07aa2
Author: Wilson Ng <wilson.ng@bigswitch.com>
Date:   Wed Aug 24 18:35:00 2016 -0700

    Add bsn_hash_select instruction.

commit 8ba0032fe662c13d6a07a7dd1df6570f618f9419
Author: allewwaly <fangtuo90@gmail.com>
Date:   Mon Aug 15 21:49:04 2016 +0800

    add tcp_flags

commit fcffa3c608749dcc4b80e583421ca2784e0e6eac
Merge: 5be7ba1 3138ad2
Author: abat <abat@bigswitch.com>
Date:   Fri Aug 12 16:10:43 2016 -0700

    Merge into master from pull request #511:
    ipv6 src/dst tlvs (https://github.com/floodlight/loxigen/pull/511)

commit 3138ad2a3a60764109dfc5c9ccf9753591c9b2ce
Author: harshsin <harshmeet.singh@bigswitch.com>
Date:   Thu Aug 11 11:20:40 2016 -0700

    ipv6 src/dst tlvs

commit 5be7ba12b882269086966c054e092b2e1ef1507c
Merge: d0f7a2e 2b3cc13
Author: abat <abat@bigswitch.com>
Date:   Tue Aug 2 09:51:36 2016 -0700

    Merge into master from pull request #510:
    New TLV types for static flag and checksum for NDP (https://github.com/floodlight/loxigen/pull/510)

commit 2b3cc1342f8f956e9d7b127e1f0f97140511429c
Author: akshata <akshata.danivasa@bigswitch.com>
Date:   Mon Aug 1 16:54:12 2016 -0700

    New TLV types for static flag and checksum for NDP

commit d0f7a2e4d8fd737e530f5919af45b2d4a2e9cf0b
Merge: 4df2933 bca0a9a
Author: abat <abat@bigswitch.com>
Date:   Fri Jul 29 14:43:37 2016 -0700

    Merge into master from pull request #509:
    TLV ndp_offload (https://github.com/floodlight/loxigen/pull/509)

commit bca0a9a1824f6f22940706272616adc9558d8067
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Fri Jul 29 14:06:54 2016 -0700

    TLV ndp_offload

commit 4df2933a8857da2679d44669c9d6db835cea4aac
Merge: 24d868f 7d2fcd5
Author: abat <abat@bigswitch.com>
Date:   Tue Jul 26 11:11:36 2016 -0700

    Merge into master from pull request #507:
    BSC-9398  Adding a new port instruction for NDP offload  (https://github.com/floodlight/loxigen/pull/507)

commit 7d2fcd5867910a7b35d5269029bbc7f31964c129
Author: Prem Sharma <premshankar.sharma@bigswitch.com>
Date:   Tue Jul 26 10:14:06 2016 -0700

    Copyright update

commit 24d868ff5efb4aada58fde866a8b466dce4a5b47
Merge: 6ed9848 6c6cf3c
Author: abat <abat@bigswitch.com>
Date:   Mon Jul 25 17:58:36 2016 -0700

    Merge into master from pull request #508:
    loci: set wire length when truncating (https://github.com/floodlight/loxigen/pull/508)

commit 6c6cf3ca08f5a794f8f0b3c54e99331bcaf0bedc
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Mon Jul 25 17:06:05 2016 -0700

    loci: set wire length when truncating

    Previously only the wbuf and object lengths were reset. This resets the length
    fields on the wire.

commit f8f5ea3a8557706ca3e6a420f7b76474303a6785
Author: Prem Sharma <premshankar.sharma@bigswitch.com>
Date:   Mon Jul 25 15:14:25 2016 -0700

    Adding a new instruction for ndp offload.

commit 6ed98488f86d821ddfda46bdb256a93d2cee23ce
Merge: 6570787 d229074
Author: abat <abat@bigswitch.com>
Date:   Wed Jul 20 10:18:21 2016 -0700

    Merge into master from pull request #506:
    pyloxi: support connecting over a unix domain socket (https://github.com/floodlight/loxigen/pull/506)

commit d229074f11cdcbafbdc5f1df213ce13273f54b26
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Jul 20 10:10:32 2016 -0700

    pyloxi: support connecting over a unix domain socket

commit 657078745dba679c3db54e65ac1e5c699ef11a89
Merge: 00df802 ec79cbe
Author: abat <abat@bigswitch.com>
Date:   Thu Jul 14 14:37:33 2016 -0700

    Merge into master from pull request #500:
    ICMPV6 packet-in reason. (https://github.com/floodlight/loxigen/pull/500)

commit ec79cbe19447bc90aca5c8e4152ef045c0d63dcb
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Thu Jul 14 14:28:08 2016 -0700

    ICMPV6 packet-in reason.

commit 00df802a02f1422a954fa67a90311a24c37c4d09
Merge: 704e718 b809b38
Author: abat <abat@bigswitch.com>
Date:   Sat Jul 2 09:08:23 2016 -0700

    Merge into master from pull request #499:
    Add OFP_BSN_PKTIN_FLAG_ANALYTICS (https://github.com/floodlight/loxigen/pull/499)

commit b809b380b58351bc26ea76fa84853585d1eda632
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Fri Jul 1 22:49:15 2016 -0700

    Add OFP_BSN_PKTIN_FLAG_ANALYTICS

commit 704e718a22c4d069365644d4963d0c9b61c02792
Merge: e68c39a b022fd1
Author: abat <abat@bigswitch.com>
Date:   Thu Jun 23 14:40:36 2016 -0700

    Merge into master from pull request #498:
    BSC-9320 making LENGTH field public from IPv6Address class (https://github.com/floodlight/loxigen/pull/498)

commit b022fd1e4ba9dbea3089594f4fea83517d343edc
Author: Prem Sharma <premshankar.sharma@bigswitch.com>
Date:   Thu Jun 23 14:33:17 2016 -0700

    just keeping the change of making LENGTH public

commit f9082f0b39fd8d1e6f5c9d0d113a6bfa9d93ca75
Merge: 23832a2 e68c39a
Author: Prem Sharma <premshankar.sharma@bigswitch.com>
Date:   Thu Jun 23 13:59:24 2016 -0700

    Merge branch 'master' of github.com:floodlight/loxigen

commit 23832a201fc49ecf18a29009c717f3d7a2a87c31
Author: Prem Sharma <premshankar.sharma@bigswitch.com>
Date:   Thu Jun 23 13:59:09 2016 -0700

    making LENGTH field public

commit e68c39aca57228f852b05dcd5009821b9215bee1
Merge: a1d1c6c 29d486c
Author: abat <abat@bigswitch.com>
Date:   Wed Jun 22 16:29:42 2016 -0700

    Merge into master from pull request #496:
    Correct Javadoc to fix build failure when running 'make package-java' (https://github.com/floodlight/loxigen/pull/496)

commit a1d1c6c77e9638547dd8491fbf0cb1bfd4bc9481
Merge: 866d11a fb1f7b4
Author: abat <abat@bigswitch.com>
Date:   Wed Jun 22 12:33:41 2016 -0700

    Merge into master from pull request #497:
    Add equalsIgnoreXid() + hashCodeIgnoreXid() to OFMessage (https://github.com/floodlight/loxigen/pull/497)

commit fb1f7b419d03350a71d49ab0bff9415764002688
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Wed Jun 22 11:06:28 2016 -0400

    Update Javadoc for hashCodeIgnoreXid()

commit 08068f60e9f34d9509ab1f19b578a7a2bd9b42d9
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Tue Jun 21 10:43:28 2016 -0400

    Also include a hashCodeIgnoreXid() function for primary use in hash maps, sets, etc. The use case would be the OFMessage is a member of an object being stored in e.g. a HashMap, but we don't want the XID of the OFMessage to be used in the hash computation. Our class definition that contains OFMessage will override hashCode() and utilize OFMessage's hashCodeIgnoreXid(). In this case, two or more OFMessages that are idential except for the XID will all be identified by the same hash.

commit bb644dfbd0867497cea38d2c95a58f26a9ab2845
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Tue Jun 21 08:49:23 2016 -0400

    Remove message about addition methods. Makes it seem like all the following methods in the class are custom.

commit 68a4bc6bf7af4404bc4651d81b91aba03bcb8521
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Tue Jun 21 08:30:50 2016 -0400

    Need to expose equalsIgnoreXid() in OFMessage, noting that any implementer of OFMessage will/should have an XID. This will avoid having to cast the OFMessage to the version-specific class in order to access the function.

commit 866d11af637f9d61f9386de218d2e81cd1ad0c28
Merge: f169efe 9a06029
Author: abat <abat@bigswitch.com>
Date:   Mon Jun 20 15:16:23 2016 -0700

    Merge into master from pull request #494:
    BVS-6442: Adding MacAddr generation for IPv6 Mcast addresses. (https://github.com/floodlight/loxigen/pull/494)

commit 9a06029bc84f02d25ba7f063967e864a811e24b1
Author: Prem Sharma <premshankar.sharma@bigswitch.com>
Date:   Mon Jun 20 14:39:19 2016 -0700

    addressing review comments

commit f169efe9368214ce76ffe830cdef818ac4d15ffc
Merge: 2cd0f6e a649586
Author: abat <abat@bigswitch.com>
Date:   Fri Jun 17 11:06:20 2016 -0700

    Merge into master from pull request #491:
    patch for OF1.5 table features stats messages + actions <--> apply-actions instruction mapping for OF1.5 (https://github.com/floodlight/loxigen/pull/491)

commit 29d486c0eb05bb0cf5a3db66cbda1e3536eb17bb
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Thu Jun 16 21:51:22 2016 -0400

    Clean up Javadoc. Build Javadoc with Oracle JDK 1.8 fails. Perhaps maven Javadoc plugin shouldn't interpret the warnings as fatal errors... but fixing the root cause is nice.

commit 2cd0f6e4ab4ee7a40d6cfe7a7b50d1583a728bd9
Merge: 8d8bf88 720b536
Author: abat <abat@bigswitch.com>
Date:   Thu Jun 16 16:26:44 2016 -0700

    Merge into master from pull request #495:
    Add BSN IPV6 Prefix TLV (https://github.com/floodlight/loxigen/pull/495)

commit 720b536315cb6e855027cc92702d74f66f56609e
Author: akshata <akshata.danivasa@bigswitch.com>
Date:   Thu Jun 16 15:10:24 2016 -0700

    Add BSN IPV6 Prefix TLV

commit 6f2e315254c7078172152605c51e86406b650b93
Author: Prem Sharma <premshankar.sharma@bigswitch.com>
Date:   Thu Jun 16 13:08:39 2016 -0700

    Adding MacAddr generation for IPv6 Mcast addresses.

commit a6495860e3f89d28174301be0977892fc563a1d8
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Wed Jun 15 20:18:18 2016 -0400

    Remove duplicate OFFlowAdd, Modify, and ModifyStrict .Builder setActions() and defer Modify and ModifyStrict to Add.

commit 8d8bf8845aaa482447d4be99ee56a2d717b9b6b6
Merge: e5101b1 ee80911
Author: abat <abat@bigswitch.com>
Date:   Thu Jun 9 06:51:36 2016 -0700

    Merge into master from pull request #493:
    Patch to optionally ignore the XID field in OFMessage and other types (https://github.com/floodlight/loxigen/pull/493)

commit e5101b1e2b2b273adddf8848e5ba89b6198025b6
Merge: 359c28e e52485d
Author: abat <abat@bigswitch.com>
Date:   Wed Jun 8 09:19:32 2016 -0700

    Merge into master from pull request #492:
    OF1.0 patch for ICMP type and code matches (https://github.com/floodlight/loxigen/pull/492)

commit a1094aa9ebcef543e4748a31ca77fa486ca1ce62
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Tue Jun 7 21:24:24 2016 -0400

    Remove duplicate code from OFFlowMod custom templates and add in missing templates

commit ee809117501a5c85cc9484bdc559f6edf5a7d6d3
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Tue Jun 7 20:11:32 2016 -0400

    Move newline within creation of equalsIgnoreXid() function to avoid 2 newlines b/t classes w/o an 'xid' field.

commit 6d7b2bf1bf3ad68f3d1deaa3f730a37a9c1ad0d2
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Tue Jun 7 20:09:00 2016 -0400

    Refactor flow_desc --> flow for backwards compatibility; flow_stats --> flow_lightweight (lightweight sounds good to me).

commit ff16fe03bfd7c6e497191d7933496b2e85180a3c
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Tue Jun 7 18:57:22 2016 -0400

    Use lambda expression to search for 'xid' field in place of clunky for+if.

commit 359c28ee8a60f1732634e618df414ec46fb007b1
Merge: bbd08a0 b84f6a2
Author: abat <abat@bigswitch.com>
Date:   Tue Jun 7 09:31:44 2016 -0700

    Merge into master from pull request #489:
    HexString: optimize performance; MacAddress: optimize putTo BVS-5367 LOXI-77 (https://github.com/floodlight/loxigen/pull/489)

commit e52485d8e36adb1461d92760ad0bd2e8f397f3be
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Mon Jun 6 12:25:21 2016 -0400

    Patch getters to return ICMPv4Type/Code instead of TransportPort for OpenFlow 1.0.

commit b84f6a28f50a40ff5d949df4f809ef86b4ac95b2
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Mon Jun 6 07:08:52 2016 -0700

    HexString: address comment, remove redundant check

commit f53a11ef879dd4a49d5d75f76edc5fcb3cca63ad
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Thu Jun 2 16:38:40 2016 -0400

    For any class with an XID field (detected by a class field named 'xid'), include an equalsIgnoreXid() function to ignore the XID in the equality check. The assumption, of course, is that the XID field is named 'xid' and is a primitive type (long at present). This will allow for the content-comparison of two OFMessages without regard to when they were created (or what the XID was set to).

commit f405abd30609f7caa564e2bf772cbac9597a8a6d
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Thu Jun 2 14:35:29 2016 -0400

    Allow using the transport source and destination port match fields for ICMP type and code, respectively. This was mostly done, but was incomplete in getMatchFields(), resulting in the thrown exception.

commit d1901765bf550eb9b0bd50a4e8e50827b0294e58
Merge: b08dc22 c15a16c
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Thu Jun 2 11:22:17 2016 -0400

    Merge branch 'master' of https://github.com/rizard/loxigen

commit b08dc224cb0ede4914f27bb38b4d9e38ee6ac3e7
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Thu Jun 2 11:20:04 2016 -0400

    Refactor OF1.5 stats/multipart messages to use same enum names as previous OF versions. This eliminates multiple stat_type enums that map to the same underlying OF message.

commit fd6c3f530241723e43ccd5b7c56f78e1de9c0835
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Thu May 19 06:54:16 2016 -0700

    MacAddress.putTo - performance optimization LOXI-77

    It is correct to directly digest the long value instead of doing big-mangling
    and digesting an int and a short.

commit c15a16c821303be24f5355bfa858dd1538ef46d9
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Wed May 18 16:20:06 2016 -0400

    Fix port_desc_stats_reply. The list of the the port_desc types should be called 'entries', not 'ports'. Otherwise, this creates two getters that get the same thing.

commit 03edd1933fe289e147a36e8d51caf3d09d9fffa2
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Mon May 16 13:05:34 2016 -0400

    OpenFlow 1.3, 1.4, and 1.5 table-features message is the same, pretty much. Not sure why it was table_features before OpenFlow 1.5 and table_feature (singular) for OpenFlow 1.5. This causes an OFTableFeaturesStatsRequest/Reply and OFTableFeatureStatsRequest/Reply message to appear as two different OFMessages.

commit 8a1aeb70ed28a86be91484fb669d9e8d5a7c264c
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Mon May 16 12:45:48 2016 -0400

    Map actions to apply-actions instruction for OpenFlow 1.5

commit 442b8b89299d78981cf25e252f542569d0bd9072
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Sun May 15 05:56:24 2016 -0700

    HexString: optimize hex string conversions

    While debugging a performance problem related to MacAddress.toString, I
    noticed that the HexString conversion code we had was really old and
    inefficient. This code was even using anti-patterns like concatenating
    Strings without a StringBuilder (!).

    These routines are used in a quite a lot of serialization
    cases, e.g., for DatapathIds.

    This commit replaces them with optimized implementatations. These are
    necessarily relatively ugly and procedural.

    JMH benchmarks show the new versions to be between 3.5 and 9.1x faster.

    JMH Benchmark results:
    Old versions:
    ```
    Benchmark                                    Mode  Cnt        Score       Error  Units
    HexStringBenchmark.testBytes6ToHexString    thrpt  200  5482128.668 ± 10011.236  ops/s
    HexStringBenchmark.testBytes8ToHexString    thrpt  200  4097441.103 ±  9869.569  ops/s
    HexStringBenchmark.testLongToHexStringPad6  thrpt  200  6015404.366 ± 16095.163  ops/s
    HexStringBenchmark.testLongToHexStringPad8  thrpt  200  4499879.492 ±  7371.526  ops/s
    HexStringBenchmark.testMacToString          thrpt  200  6039423.717 ± 14960.774  ops/s
    HexStringBenchmark.testToBytes              thrpt  200  4320243.806 ± 12942.870  ops/s
    HexStringBenchmark.testToLong               thrpt  200  5733672.143 ± 26865.832  ops/s
    ```

    New versions:
    ```
    Benchmark                                    Mode  Cnt         Score        Error  Units
    HexStringBenchmark.testBytes6ToHexString    thrpt  200  46454822.004 ± 131143.806  ops/s
    HexStringBenchmark.testBytes8ToHexString    thrpt  200  37602862.513 ±  92041.035  ops/s
    HexStringBenchmark.testLongToHexStringPad6  thrpt  200  38286359.083 ±  80960.505  ops/s
    HexStringBenchmark.testLongToHexStringPad8  thrpt  200  30273992.729 ±  55125.764  ops/s
    HexStringBenchmark.testMacToString          thrpt  200  37012667.642 ±  93106.031  ops/s
    HexStringBenchmark.testToBytes              thrpt  200  15237921.501 ±  16622.545  ops/s
    HexStringBenchmark.testToLong               thrpt  200  30268266.435 ±  24626.181  ops/s
    ```

commit bbd08a0ba812425e7310286dc0692baae3a24d7b
Merge: 55bc3da a76993f
Author: abat <abat@bigswitch.com>
Date:   Sat May 14 12:09:43 2016 -0700

    Merge into master from pull request #487:
    ACTSET_OUTPUT OXM should be type OFPort, not TransportPort (https://github.com/floodlight/loxigen/pull/487)

commit 55bc3daa3eb2fd99c461d4454ce547e7a8d96a2e
Merge: b676b7b 08a6cde
Author: abat <abat@bigswitch.com>
Date:   Thu May 12 14:40:24 2016 -0700

    Merge into master from pull request #488:
    Add drop tlv (https://github.com/floodlight/loxigen/pull/488)

commit 08a6cde32dd6abd83cfe80613c40579ebfd886b8
Author: harshsin <harshmeet.singh@bigswitch.com>
Date:   Thu May 12 14:12:21 2016 -0700

    Add drop tlv

commit a76993fac6f7f3d14df6bb86c209791e8a97bd0a
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Thu May 12 10:36:59 2016 -0400

    ACTSET_OUTPUT OXM should be type OFPort, not TransportPort

commit b676b7beb365882e4d906807f93c54f291b7acf6
Merge: d0a526d f290055
Author: abat <abat@bigswitch.com>
Date:   Mon May 9 15:48:40 2016 -0700

    Merge into master from pull request #486:
    Java: V1.5 Stat: add convenience methods akin to Match (https://github.com/floodlight/loxigen/pull/486)

commit d0a526dff1fc77664060d6181c21c5c086432f23
Merge: aa04b51 92be91b
Author: abat <abat@bigswitch.com>
Date:   Mon May 9 14:45:45 2016 -0700

    Merge into master from pull request #485:
    standard-1.5:  fixed reserved value (https://github.com/floodlight/loxigen/pull/485)

commit 92be91bfec501814eb40ffe6906262114fc78f50
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Fri May 6 19:18:20 2016 -0700

    standard-1.5: of_stat_v6: use padding for reserved value

commit aa04b51ccc3949e30a678f7edb7f211efe9d7233
Merge: dd2e04b d346569
Author: abat <abat@bigswitch.com>
Date:   Mon May 9 12:24:45 2016 -0700

    Merge into master from pull request #480:
    Expose MatchField prereqs (https://github.com/floodlight/loxigen/pull/480)

commit d34656959b43e8d6783dbee52a24e12caf44e4be
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Mon May 9 11:34:04 2016 -0400

    Remove types from use of ImmutableSet's of() and copyOf(). Remove unnecessary defensive programming in MatchField constructor.

commit dd2e04bda188622767af52e8e6d8dd6234ff0429
Merge: 9555af7 62bd72d
Author: abat <abat@bigswitch.com>
Date:   Sat May 7 11:16:47 2016 -0700

    Merge into master from pull request #484:
    openflow_input: generate BSN messages for version 1.5 (https://github.com/floodlight/loxigen/pull/484)

commit f29005514bbcdc01ee697e11a339f19bb8cec2e5
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Fri May 6 19:20:37 2016 -0700

    Java: V1.5 Stat: add convenience methods akin to Match

    Stat mimics the design of the generic Match object. This commit
    completes the set of convenience methods that abstract the details
    and enable the user to set an abstract statfield.

commit 62bd72dbadc6a6e50f70e3a62febb0ec0e73cb5d
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Fri May 6 19:24:42 2016 -0700

    openflow_input: generate BSN messages for version 1.5

    This auto-generated commit marks all bsn messages generated for
    version 1.4 to also be generated for version 1.5

commit 39b0cbc96573cf3b8d55695f441dff2bfc2a3084
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Fri May 6 07:58:11 2016 -0400

    Refactor to Guava ImmutableSets. In MatchField, there is no longer a need to check if the Prerequisite[] is empty, since copyOf() will (first) check this. In Prerequisite, still need to check if OFValueType[] is empty to set the any variable.

commit 9555af7d9fb1f441996b42b11205e6ee71dc08cd
Merge: 02a0049 2a1ecc0
Author: abat <abat@bigswitch.com>
Date:   Thu May 5 17:36:41 2016 -0700

    Merge into master from pull request #483:
    Add disable_src_mac_check tlv (https://github.com/floodlight/loxigen/pull/483)

commit 2a1ecc0c23c43c38504c18d5334e3cd02d7972c0
Author: harshsin <harshmeet.singh@bigswitch.com>
Date:   Thu May 5 17:14:16 2016 -0700

    Add disable_src_mac_check tlv

commit 02a004999954d08c7c8feda565af6183e5462049
Merge: b6e2157 2d7cf05
Author: abat <abat@bigswitch.com>
Date:   Thu May 5 12:25:39 2016 -0700

    Merge into master from pull request #482:
    Update README.MD for versions 1.4.1 and 1.5.1 (https://github.com/floodlight/loxigen/pull/482)

commit 2d7cf05b81db0ad71af1143a77da058fc69b4ce7
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Thu May 5 11:01:46 2016 -0700

    Update README.MD for versions 1.4.1 and 1.5.1

commit b6e21571994869b6da89caa260f475afa1674abc
Merge: c0cef0d 7f40a2f
Author: abat <abat@bigswitch.com>
Date:   Tue May 3 15:48:22 2016 -0700

    Merge into master from pull request #459:
    OpenFlow 1.5.1 implementation (https://github.com/floodlight/loxigen/pull/459)

commit e23a1294c0c491da026f7495ed70be4c218c2ae5
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Tue May 3 09:41:53 2016 -0400

    Fix spelling typo

commit c9be566f6155d9229efbbbad525a36d046cb5d40
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Tue May 3 09:02:08 2016 -0400

    Safely allow us to read the prerequisites (their types and possible values) from a MatchField. This will greatly help with automated flow-mod composition and for error checking in the static flow pusher (in supplement to the arePrerequisitesOK() function in MatchField

commit 7f40a2f719d8de561386b20f37758eee43840885
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Fri Apr 29 10:39:42 2016 +0300

    WhiteSpace & Unnecessary File Fix

commit 29861119e6af703178b07a9a404bc76bebcbda80
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Fri Apr 29 09:41:56 2016 +0300

    OFStatVer15 toString fix

commit 06b5fde10220ab8d1eb18d0c4dcada95f9e2b7de
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Thu Apr 28 18:21:13 2016 +0300

    standard-1.4 fix

commit 3eb1f2e549e49d0b822c0569d8fd64b1c6c32693
Merge: c3a2baf 2257394
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Wed Apr 27 09:12:55 2016 +0300

    Merge pull request #6 from andi-bigswitch/of15-pr-4

    Some more cleanup for OF1.5

commit 2257394226de123bbfe60071907ff8149b1535a9
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Apr 26 14:03:17 2016 -0700

    java: remove logback-test.xml

commit 0c19dfe10145d0313a13ddea6858d67fa9dbbb54
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Apr 26 13:55:57 2016 -0700

    OF15: fix whitespace errors

commit 711f96b08e837b85409c200b6ed61abc7f2fbad4
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Tue Jan 12 11:28:14 2016 -0800

    Fix doc syntax, Java 8 does not like it

commit a6146e40833646ceabe5899ff8f5b13287140761
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Apr 26 13:39:19 2016 -0700

    pom.xml: Remove unneeded javadoc mangling

    Javadoc on Java8 was failing because an earlier commit
    erroneously undid the fix from 914939c5.

    No need to disable Javadoc linting.

commit 8ee0c9c85dd83aa8f183e4308655016a4f37cde1
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Apr 26 13:16:39 2016 -0700

    Remove masked versions of OXSs, associated methods

    OXS (stats) fields don't have a useful notion of wildcards, the openflow
    standard reserves the corresponding field.

    This commit removes the declarations of the masked OXS fields and
    the associated java magic (also making the OXS stack simpler).

commit 5c4e052007076b4564b93f86e90ade28095824f1
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Apr 26 13:13:47 2016 -0700

    of/header_types: declare enums as stable, set wire types

    This enables those enums to be used in data types

commit dc1372f3e80e46494b86da528c6a9ad1cd37a30c
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Apr 26 13:18:02 2016 -0700

    java: PacketType must come as first OXM according to OF Spec

commit 348515b8e75a86111d2abebb21459c11a696206b
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Apr 26 13:12:17 2016 -0700

    java: fix PacketType

    PacketType was not following the OpenFlow spec correctly (the namespace
    16 bit word was not considered). It also needed toString/equals/hashcode

commit ae75d35b0af264e37dfb21d3e90e7e59ad24a9cb
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Apr 26 13:11:53 2016 -0700

    java/OFConnectionIndex: add toString/equals/hashcode

commit c3a2baf1b34156d5e01817af3ce8e0299518b442
Merge: 0c3c29e de20bbb
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Tue Apr 26 09:38:14 2016 +0300

    Merge pull request #5 from rlane/of15-4

    pyloxi: add OF 1.5 unit test

commit de20bbbc5c48896c5e18e5245947eb38cb8a6876
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Mon Apr 25 19:51:58 2016 -0700

    pyloxi: add OF 1.5 unit test

commit 0c3c29eb9242b820ffb54aeae7d74875dcc31c51
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Mon Apr 25 18:23:27 2016 +0300

    Whitespace / Tab / Pom Fix

    2.1.0 snapshot -> 3.0.0 snapshot

commit fe97f404dd19424ae629441a967727a5e1a43c64
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Mon Apr 25 15:19:54 2016 +0300

    tab/whitespace fix

commit e44440c6da57f55c93d16f151278480b54681870
Merge: ba02b95 c0cef0d
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Mon Apr 25 10:54:10 2016 +0300

    Merge remote-tracking branch 'refs/remotes/floodlight/master'

commit ba02b958fd0f5b0895806c35de2ed9e528eafcbb
Merge: 170aff6 7848860
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Mon Apr 25 10:39:36 2016 +0300

    Merge pull request #4 from rizard/of15-3

    Fix group_add and group_desc_reply tests

commit 7848860d4ab1961e1524b969c42c32a866494883
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Fri Apr 22 17:01:46 2016 -0400

    Fix group_desc_stats_reply test to use correct lengths. Also correct and tidy up the Java.

commit c0cef0d6f19abac80bc5addf0acc6aa7a6b3f56c
Merge: 91b5ba0 015d82c
Author: abat <abat@bigswitch.com>
Date:   Fri Apr 22 13:47:35 2016 -0700

    Merge into master from pull request #479:
    [SWL-2807] Add PFC counters to BSN port counters (https://github.com/floodlight/loxigen/pull/479)

commit 9d29778c5b8c6cd3af137ef9f663d4625ee781ac
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Fri Apr 22 16:40:47 2016 -0400

    Fix typos

commit 04181632ccd30beaefb6132438dd216abbc1c580
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Fri Apr 22 16:36:41 2016 -0400

    Update OFGroupAdd test to use correct lengths and include OFGroupBucketPropWeight for SELECT group type

commit 015d82ca68bda3d19b58ab954a3442b19cda0a8f
Author: Nick Wang <ning.wang@bigswitch.com>
Date:   Thu Apr 21 16:27:14 2016 -0700

    initial check-in for supporting PFC counters

commit 91b5ba0a2343f95e22ee26b7de81818faf5c39a2
Merge: b49e148 aeb3273
Author: abat <abat@bigswitch.com>
Date:   Thu Apr 21 14:07:36 2016 -0700

    Merge into master from pull request #478:
    Dockerized build environment for loxigen (https://github.com/floodlight/loxigen/pull/478)

commit aeb32732069f47e33e7e0dcc26258f0c0a42ce8b
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Thu Apr 21 13:55:50 2016 -0700

    docker.sh: remove duplicated --rm

commit 11b314d7900c5f1e37c75685f9719aa718bfa2ae
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Thu Apr 21 10:22:01 2016 -0700

    test_data: remove manual bucket/action lengths

commit a92a05104da488a6c4ea8a5d4ba39863caa18352
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Thu Apr 21 10:21:35 2016 -0700

    openflow_input: use field length member syntax in standard-1.5

commit 1c085ae901316d51743cc2fc31a85aef5f1fd3cb
Merge: 170aff6 b49e148
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Thu Apr 21 10:04:10 2016 -0700

    Merge remote-tracking branch 'origin/master' into of15-3

commit ead5343d5be6a96b6c1976348884246a377f9f76
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Wed Apr 20 19:30:58 2016 -0700

    Improvements to docker.sh:

    - use python-based abspath for OS X compatibility
    - only set -t if running from terminal
    - --rm to clean up the container after exit

commit 5c454dddbe4d72cca81e554765067f27b73a69b9
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Wed Apr 20 16:26:15 2016 -0700

    docker: add docker launcher

    ./docker.sh launches docker, with the current repo mounted at /loxi

commit 1428f6271bb4ce8b8790ba176a75c5ae96a0896b
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Wed Apr 20 16:25:28 2016 -0700

    Add: dockerfile for basic build environment

commit b49e148ff613fd8bfd347d1ef05e851cdfe20f27
Merge: 29f1cb7 102f4d5
Author: abat <abat@bigswitch.com>
Date:   Wed Apr 20 16:17:27 2016 -0700

    Merge into master from pull request #477:
    push-artifacts: add support to specify new target branch to be created (https://github.com/floodlight/loxigen/pull/477)

commit 102f4d57d3e646f53e9b4befdbc23e7ccfe1d620
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Wed Apr 20 15:08:42 2016 -0700

    fixup push-artifacts

commit 8d4f2c7a5c9da15db3e8baf2552d753ed67e94cd
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Wed Apr 20 14:45:40 2016 -0700

    push-artifacts: enable debugging

commit c65be0bd26355e43c9fa13ccb45de6a5e2fe650f
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Wed Apr 20 14:26:01 2016 -0700

    push-artifacts: add support to specify new target branch to be created

    This is intended so we can easily inspect the artifact diffs for
    pull requests.

    Jenkins intergration pending.

commit 29f1cb7e2c7f23b624579063e5512ba2072d0e83
Merge: f40e86f baa3641
Author: abat <abat@bigswitch.com>
Date:   Wed Apr 20 14:07:36 2016 -0700

    Merge into master from pull request #476:
    syntax for field length members (https://github.com/floodlight/loxigen/pull/476)

commit baa36419821a1af11bb07d9f87be14e5a0c08c89
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 13:48:49 2016 -0700

    frontend: remove hardcoded field length member names

commit cc957e9cb363e799d75945a1409f7ff3ed50f314
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 13:48:32 2016 -0700

    openflow_input: use field length member syntax

commit 8dda875975a5dae3d75e742968a51e3fa474e673
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 13:40:31 2016 -0700

    frontend: add syntax for field length members

commit 170aff64b1166e1776c8ebdb9929035a6cab077f
Merge: 969c4b8 fb5b092
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Wed Apr 20 21:23:44 2016 +0300

    Merge pull request #3 from rlane/of15

    Disable C backend for OF 1.5

commit fb5b0922cdf8840ab46418821731b32ff1c36044
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 11:15:59 2016 -0700

    test_data: fix C and Python port_mod testcase

commit 05c04eed2cee724ad135d2cf6d441ca371249f3d
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 11:09:28 2016 -0700

    openflow_input: remove experimenter data from standard-1.5

    Fields present in the superclass but not in a subclass cause problems for the
    Java backend. The experimenter_data fields are unnecessary, just add the
    experimenter subclass to LOXI.

commit 19a3715350e10f5b699460b16b5b38f2b064224e
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 11:01:39 2016 -0700

    Makefile: exclude OF 1.5 when building C backend

commit c960585838b0413ead59becb5f26952e6fc9d26d
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 11:01:15 2016 -0700

    loci: build of_g version maps only for target versions

commit 4817c7b83c87581b6a41881dc017a830806d39db
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 11:00:35 2016 -0700

    loxigen: filter input using target versions

commit 969c4b81a66282e1fc07a15267077951b6766390
Merge: 74313ad 70ec72c
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Wed Apr 20 20:37:53 2016 +0300

    Merge pull request #2 from rlane/of15

    Fixes for OF 1.5

commit 70ec72cbb4cfc25442ecd6424aa24eaaad1e1e4d
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 10:23:25 2016 -0700

    python: fix match/stats and enable OF 1.5 testcases

commit 95d3935685884ce41a2a6608ada2c44c45bf756d
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Wed Apr 20 10:21:49 2016 -0700

    openflow_input: fix discriminators and type fields

commit 74313ad51f52ad68c7e869978544075181407c6a
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Wed Apr 20 16:14:17 2016 +0300

    OFDuration fix

commit 96d8aac72ffcb71300e2aca43a61e59cffed92fb
Merge: 539eb7f f40e86f
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Wed Apr 20 15:55:47 2016 +0300

    Merge remote-tracking branch 'refs/remotes/floodlight/master'

commit 539eb7f13937ac90a4c30545188885418918e618
Merge: 30589a1 857d9e2
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Wed Apr 20 15:42:29 2016 +0300

    Merge pull request #1 from andi-bigswitch/pr-459-patch

    java_gen: support OFFlowMonitorEntry, a variable length ofclass w/o length member

commit f40e86f7cc7a21815d321f5bf881b14965418ff1
Merge: ac80bfc 0039186
Author: abat <abat@bigswitch.com>
Date:   Tue Apr 19 15:10:38 2016 -0700

    Merge into master from pull request #475:
    Add of_queue_desc_prop_bsn and of_queue_desc_prop_bsn_queue_name (https://github.com/floodlight/loxigen/pull/475)

commit 00391865a529dc672ac1737af07184c45ed22ad8
Author: Ken Chiang <ken.chiang@bigswitch.com>
Date:   Tue Apr 19 11:15:47 2016 -0700

    Change type of name field from of_str64_t to of_octets_t.

commit 857d9e214638795601a03809211d15594a08d10c
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Apr 19 10:34:12 2016 -0700

    java_gen: support OFFlowMonitorEntry, a variable length ofclass w/o length member

commit afead678834a990669e76df8089a2d7ac2ca990b
Author: Ken Chiang <ken.chiang@bigswitch.com>
Date:   Thu Apr 14 13:39:03 2016 -0700

    Add of_queue_desc_prop_bsn and of_queue_desc_prop_bsn_queue_name to return
    queue names.

commit 30589a18742625c4e96e5ef14f5c1bf0e10e18bd
Merge: 0096da0 ac80bfc
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Thu Apr 14 13:35:39 2016 +0300

    Merge remote-tracking branch 'refs/remotes/floodlight/master'

commit ac80bfc59512725e983ca9011f88d13ea1ff3cb5
Merge: 0865557 3b8763e
Author: abat <abat@bigswitch.com>
Date:   Mon Apr 11 11:13:42 2016 -0700

    Merge into master from pull request #474:
    add of_bsn_tlv_uint64_list and fix of_bsn_tlv_vlan_mac_list (https://github.com/floodlight/loxigen/pull/474)

commit 3b8763edf820a93026c1a93aeaf3c0e29655d1d7
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Mon Apr 11 11:05:57 2016 -0700

    openflow_input: add of_bsn_tlv_uint64_list

commit b8a50382feeb28834bba18136e90ce04f7642fe6
Author: Rich Lane <rich.lane@bigswitch.com>
Date:   Mon Apr 11 11:05:24 2016 -0700

    openflow_input: add superclass to of_bsn_tlv_vlan_mac_list

commit 08655579fd741c5a8378d0859204ea9a750a4138
Merge: 3c24219 c4e34e4
Author: abat <abat@bigswitch.com>
Date:   Mon Mar 28 11:23:38 2016 -0700

    Merge into master from pull request #472:
    Add new vxlan-egress and cpu lag indicator tlvs (https://github.com/floodlight/loxigen/pull/472)

commit 3c24219a38dddc25bb15252c4dce0585ebff6d9b
Merge: 7743b12 a5bae56
Author: abat <abat@bigswitch.com>
Date:   Mon Mar 28 09:58:26 2016 -0700

    Merge into master from pull request #473:
    Make Bundle-Add inherit the XID of the nested message  #loxigen/454 (https://github.com/floodlight/loxigen/pull/473)

commit a5bae5632b453c377e5c0c8072bb5c7bebf54446
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Mon Mar 28 06:04:02 2016 -0700

    Make Bundle-Add inherit the XID of the containing message  #loxigen/454

    This ensures the generated messages conform to the OF Spec, 1.4,
    section 7.3.9.6 Adding messages to a bundle:

    > Message added in a bundle should have a unique xid to help matching
    > errors to messages, and the xid of the bundle add message must be the
    > same.

commit c4e34e4428addad92981af7328acd532cc505426
Author: harshsin <harshmeet.singh@bigswitch.com>
Date:   Fri Mar 25 16:54:46 2016 -0700

    Add new vxlan-egress and cpu lag indicator tlvs

commit 7743b122bb78e4752430e534a20e8f4090ce8794
Merge: 93392d0 916419f
Author: abat <abat@bigswitch.com>
Date:   Mon Mar 21 17:43:42 2016 -0700

    Merge into master from pull request #471:
    Added new TLVs for GRE tunnel gen table (https://github.com/floodlight/loxigen/pull/471)

commit 916419fc71fb27221a3125999dd058d73bb6f50d
Author: Rob Vaterlaus <rob.vaterlaus@bigswitch.com>
Date:   Sun Mar 20 17:38:30 2016 -0700

    Added new TLVs for GRE tunnel gen table

commit 93392d0a26f5a73d6e47c2fb838f30c3e04c3d92
Merge: 3767c61 6dbc151
Author: abat <abat@bigswitch.com>
Date:   Thu Mar 17 15:11:24 2016 -0700

    Merge into master from pull request #470:
    Add gentable entry-priority tlv (https://github.com/floodlight/loxigen/pull/470)

commit 6dbc15128bcf2123bafaa83facfa77c79d42cb90
Author: harshsin <harshmeet.singh@bigswitch.com>
Date:   Thu Mar 17 10:52:59 2016 -0700

    Add qos-priority tlv

commit 55fc5f7dca9acfb99ebb24edc464232ef22a5c4d
Author: harshsin <harshmeet.singh@bigswitch.com>
Date:   Wed Mar 16 12:22:43 2016 -0700

    Add gentable entry-priority tlv

commit 3767c61e2998cce3775c76d6e4d2cf46c92d6cbd
Merge: 3326f0d 34b951c
Author: abat <abat@bigswitch.com>
Date:   Thu Mar 10 14:48:29 2016 -0800

    Merge into master from pull request #469:
    Add new tlv's for vxlan and dcbx feature vfp entries (https://github.com/floodlight/loxigen/pull/469)

commit 34b951c588296db9667acf7ed07633bf16a549f5
Author: harshsin <harshmeet.singh@bigswitch.com>
Date:   Thu Mar 10 14:46:38 2016 -0800

    changed vfp_class_id value to 32 bits

commit 8f5996c2e8d11c7c4c9dc83adee054f374fd3de1
Author: harshsin <harshmeet.singh@bigswitch.com>
Date:   Thu Mar 10 14:36:17 2016 -0800

    add new tlv's for vxlan and dcbx feature vfp entries

commit 3326f0d2e76232c454c2966529a8c602a378a920
Merge: d75d79d a3d68df
Author: abat <abat@bigswitch.com>
Date:   Mon Mar 7 11:02:43 2016 -0800

    Merge into master from pull request #467:
    Add TLVs for GTP match in the context of port-channel hashing (https://github.com/floodlight/loxigen/pull/467)

commit 0096da08177a6bda2c75e3111318a810c69d860c
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Mon Mar 7 16:44:08 2016 +0200

    Test Fix

    Tests are fixed

commit 1be4eb0f2a3f2cc747184f16381c4e23495d8b2d
Author: abakagamze <gamze.abaka@argela.com.tr>
Date:   Mon Mar 7 16:28:48 2016 +0200

    OpenFlow 1.5.1 Improvement

    * Prerequisites are added
    * Javadoc is added and tested with Java 1.7 / 1.8
    * OFValue classes (OFDuration, OFFlowCount, OFPacketCount, OFByteCount,
    OFIdleTime) are removed
    * Custom files (GroupAddVer15 etc) are removed

    * Tests are added for:

    ACTIONS
    -----------
    - (0) OUTPUT Action
    - (25) SET-FIELD Action (eth_dst, ipv6_src, tcp_src)

    INSTRUCTIONS
    -------------
    - (1) GOTO_TABLE
    - (2) WRITE_METADATA
    - (3) WRITE_ACTIONS
    - (4) APPLY_ACTIONS
    - (5) CLEAR_ACTIONS
    - No Instruction for (6) in OpenFlow 1.5.1 spec.
    - (7) STAT_TRIGGER

    MATCH_V3
    -----------
    - METADATA, ETH_SRC, UDP_DST, IPV6_DST

    MESSAGES
    -------------
    - (0) Hello
    - Hello Elements Version Bitmap
    - (1) Error Messages
    (0) HELLO_FAILED
    (1) BAD_REQUEST
    (2) BAD_ACTION
    (3) BAD_INSTRUCTION
    (4) BAD_MATCH
    (5) FLOW_MOD_FAILED
    - (2) Echo Request
    - (3) Echo Reply
    - (5) Features Request
    - (6) Features Reply
    - (7) Get-Config Request
    - (8) Get-Config Reply
    - (9) Set-Config
    - (10) Packet-In
    - (11) Flow Removed
    - (12) Port Status
    - (13) Packet-Out
    - (14) Flow Mod
    (0) ADD
    (1) MODIFY
    (2) MODIFY_STRICT
    (3) DELETE
    (4) DELETE_STRICT
    - (15) Group Mod
    (0) ADD
    - (16) Port Mod
    - (17) Table Mod
    - (18) Multipart Message Request
    (0) Desc Stats
    (1) Flow Desc Stats (old name is Flow Stats)
    (2) Aggregate Stats
    (3) Table Stats
    (4) Port Stats
    (5) Queue Stats
    (6) Group Stats
    (7) Group Desc Stats
    (8) Group Features Stats
    (9) Meter Stats
    (10) Meter Desc Stats (old name is Meter Config)
    (11) Meter Features Stats
    (12) Table Features Stats
    (13) Port Desc Stats
    (14) Table Desc Stats
    (15) Queue Desc Stats
    (16) Flow Monitor
    (17) Flow Stats
    (18) Controller Status Stats
    (19) Bundle Features

    - (19) Multipart Message Reply
    (0) Desc Stats
    (1) Flow Desc Stats (old name is Flow Stats)
    (2) Aggregate Stats
    (3) Table Stats
    (4) Port Stats
    (5) Queue Stats
    (6) Group Stats
    (7) Group Desc Stats
    (8) Group Features Stats
    (9) Meter Stats
    (10) Meter Desc Stats (old name is Meter Config)
    (11) Meter Features Stats
    (12) Table Features Stats
    (13) Port Desc Stats
    (14) Table Desc Stats
    (15) Queue Desc Stats
    (16) Flow Monitor Stats
    (17) Flow Stats

    - (20) Barrier Request
    - (21) Barrier Reply
    - No Messages for (22) and (23) in Openflow 1.5.1 spec.
    - (24) Role Request
    - (25) Role Reply
    - (26) Get Aysnc Request
    - (27) Get Async Reply
    - (28) Set Async
    - (29) Meter Mod
    (0) ADD
    - (30) Role Status
    - (31) Table Status
    - (32) Request Forward
    - (33) Bundle Control
    - (34) Bundle Add

commit a3d68df4562585160ed726c9934e96659278e3f8
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Fri Mar 4 17:04:15 2016 -0800

    Add TLVs for GTP match in the context of port-channel hashing

commit d75d79d6ec0f015c8805b53ea01b35834ceeb2f6
Merge: d9b4242 5529f5f
Author: abat <abat@bigswitch.com>
Date:   Wed Mar 2 19:39:18 2016 -0800

    Merge into master from pull request #466:
    Add tlv for port channel hashing (https://github.com/floodlight/loxigen/pull/466)

commit 5529f5f13e558011e6ed445adc03462891da6b53
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Tue Mar 1 17:03:33 2016 -0800

    Add tlv for port channel hashing

commit d9b4242a3e84a24fc2d496e05bbcc58d17211953
Merge: 351e6a7 99d4e51
Author: abat <abat@bigswitch.com>
Date:   Mon Feb 22 10:25:19 2016 -0800

    Merge into master from pull request #465:
    define new bsn_vfi match oxm (https://github.com/floodlight/loxigen/pull/465)

commit 99d4e51a737a18264aaa194a22c63e565032c0b6
Author: Harshmeet Singh <harshmeet.singh@bigswitch.com>
Date:   Fri Feb 19 13:29:20 2016 -0800

    define new bsn_vfi match oxm

commit 351e6a7d45c934a57b537f69bb7d91c59b86e8a7
Merge: 83314ed c5042be
Author: abat <abat@bigswitch.com>
Date:   Fri Feb 19 10:44:32 2016 -0800

    Merge into master from pull request #462:
    Add a new Virtual Forwarding Instance (VFI) type to the openflow library (https://github.com/floodlight/loxigen/pull/462)

commit c5042be1a23fcf5de4da4b08e0672e4902d6f033
Author: sdmodi <sudeep.modi@bigswitch.com>
Date:   Fri Feb 19 10:39:37 2016 -0800

    Address review comment

commit fbba77442b66b45988603faee593bf3bd7776e8a
Merge: 63abfb8 83314ed
Author: sdmodi <sudeep.modi@bigswitch.com>
Date:   Fri Feb 19 10:39:31 2016 -0800

    Merge remote-tracking branch 'floodlight/master'

commit 83314edfecd0085d04e948ec9ddeb37780ccf175
Merge: 2cc26f2 d473459
Author: abat <abat@bigswitch.com>
Date:   Thu Feb 18 13:44:40 2016 -0800

    Merge into master from pull request #464:
    add gencmd extension and of_bsn_tlv_vlan_mac_list (https://github.com/floodlight/loxigen/pull/464)

commit d4734591751c25e756f590dcedf590520b25f1de
Author: Rich Lane <rlane@bigswitch.com>
Date:   Tue Feb 9 14:27:26 2016 -0800

    openflow_input: add of_bsn_tlv_vlan_mac_list

commit e6ab937e63231494e8e7ea9451afd0128e8cfa26
Author: Rich Lane <rlane@bigswitch.com>
Date:   Tue Feb 9 14:24:41 2016 -0800

    openflow_input: add bsn_generic_command extension

commit 2cc26f280b4afb46b2e27c740e8537e539f907a3
Merge: 850995b 8d76666
Author: abat <abat@bigswitch.com>
Date:   Wed Feb 17 17:16:25 2016 -0800

    Merge into master from pull request #463:
    Support bsn_l2_cache_hit tlv in 1.4. (https://github.com/floodlight/loxigen/pull/463)

commit 8d766663348b8eb02dbc3462d13bc219fe9536a5
Author: Wilson Ng <wilson.ng@bigswitch.com>
Date:   Wed Feb 17 17:09:54 2016 -0800

    Support bsn_l2_cache_hit tlv in 1.4.

commit 63abfb8151d7d373c521f6a9140f6d9a1e64fae3
Author: sdmodi <sudeep.modi@bigswitch.com>
Date:   Wed Feb 17 16:04:55 2016 -0800

    Fix typo

commit a076efc364177d5a95ae24f0be49f8dfce933e7a
Author: sdmodi <sudeep.modi@bigswitch.com>
Date:   Wed Feb 17 16:02:30 2016 -0800

    Add a new Virtual Forwarding Instance (VFI) type to the openflow library

commit 850995bf19c7b0e6d768ec58d7bbba447da24d24
Merge: 3feb5a9 39d61e5
Author: abat <abat@bigswitch.com>
Date:   Tue Feb 16 15:50:39 2016 -0800

    Merge into master from pull request #461:
    Add vfi tlv for VXLAN VPN (https://github.com/floodlight/loxigen/pull/461)

commit 39d61e52f3c7cdc14922f2e6f5e5b8769f66f584
Author: Harshmeet Singh <harshmeet.singh@bigswitch.com>
Date:   Tue Feb 16 10:41:26 2016 -0800

    Add vfi tlv for VXLAN VPN

commit 3feb5a95a50c4d1ac7c90b2a34e5436920f0693d
Merge: ccc86f2 3c0e65c
Author: abat <abat@bigswitch.com>
Date:   Thu Feb 11 14:45:36 2016 -0800

    Merge into master from pull request #460:
    loci: fix mask size when parsing OXMs into of_match_t (SWL-2669) (https://github.com/floodlight/loxigen/pull/460)

commit 3c0e65c3a3f07bd0fd0860bceb609e095e9719cc
Author: Rich Lane <rlane@bigswitch.com>
Date:   Thu Feb 11 13:32:04 2016 -0800

    loci: fix mask size when parsing OXMs into of_match_t (SWL-2669)

    of_memmask was passed the size of a pointer, not the match field.

commit da8cdc3aa52606072db52b1f40eab2720f873086
Author: Gamze Abaka <gamze.abaka@argela.com.tr>
Date:   Mon Feb 1 15:50:43 2016 +0200

    Test Files Removed

    Test Files that are created from eclipse are removed

commit 7ce81f929ed2c24cf2764bd675339c209f716364
Author: Gamze Abaka <gamze.abaka@argela.com.tr>
Date:   Mon Feb 1 14:58:56 2016 +0200

    OpenFlow 1.5.1 implementation

    Java and Wireshark Implementation for OpenFlow 1.5.1
    --
    Basic messages (Hello, Features Request-Reply, Get Config Request,Reply,
    Set Config, Port Status, Packet-In, Table-Statistics, Port-Statistics,
    Flow Add etc) are tested with OVS 2.4.0
    --
    Flow Monitoring, Bucket Insertion / Deletion for groups, statistics
    trigger and usage of OXS classes must be tested!
    --

commit ccc86f2f5a7bc47fe7055eb7b63fd9da458c80fa
Merge: ae1c1c4 4730681
Author: abat <abat@bigswitch.com>
Date:   Wed Jan 27 19:27:33 2016 -0800

    Merge into master from pull request #458:
    Upgrade Guava Version to 19.0 (https://github.com/floodlight/loxigen/pull/458)

commit 47306813d8d0f2287909cd14ef23a7cc12cf7fe5
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Wed Jan 27 16:20:13 2016 -0800

    Upgrade Guava Version to 19.0

commit ae1c1c4fe554cb5464419851e292e5068fec47b5
Merge: ddc79f7 ce24488
Author: abat <abat@bigswitch.com>
Date:   Wed Jan 13 11:11:36 2016 -0800

    Merge into master from pull request #452:
    Duplicated the behavior in OFFlow*_setActions, version 1.3, for versions 1.1, 1.2 and 1.4 (https://github.com/floodlight/loxigen/pull/452)

commit ddc79f76083b3e8373920f5cf92137ddc9374b5f
Merge: 883c022 9649f18
Author: abat <abat@bigswitch.com>
Date:   Wed Jan 13 10:54:35 2016 -0800

    Merge into master from pull request #455:
    java: bump POM version to 2.1.0 (https://github.com/floodlight/loxigen/pull/455)

commit 9649f1816d72e50d214c3168171928f1f2e0f6a2
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Wed Jan 13 10:50:03 2016 -0800

    java: bump POM version to 2.1.0

commit ce244883434125fa2a1a2752657b501dd90d95c7
Author: AndreMantas <andremantas7@gmail.com>
Date:   Wed Jan 13 18:32:05 2016 +0000

    Removed unnecessary helper methods for FlowDelete/Strict Builders. Flow Delete messages have no actions/instructions.

commit 528dd08a0c87463a0822a2ed24e8ede8212a5cb0
Author: AndreMantas <andremantas7@gmail.com>
Date:   Wed Jan 13 15:27:04 2016 +0000

    Created template files for OFFlow*.Builder_setActions files so that each version specific file can include its template and reduce duplicate code.

commit ed8f904c2b009b45c3c9e033c7fd07aba0f315aa
Merge: d006a0e 883c022
Author: AndreMantas <andremantas7@gmail.com>
Date:   Wed Jan 13 14:41:13 2016 +0000

    Merge branch 'master' of https://github.com/floodlight/loxigen

commit 883c022922f254601be36ccb15dc0364d72a6870
Merge: 6d333f1 914939c
Author: abat <abat@bigswitch.com>
Date:   Tue Jan 12 17:03:44 2016 -0800

    Merge into master from pull request #453:
    Fix doc syntax, Java 8 does not like it (https://github.com/floodlight/loxigen/pull/453)

commit 914939c5caf95d2e59972eea28afb38f77ded564
Author: Shudong Zhou <shudongzhou@gmail.com>
Date:   Tue Jan 12 11:28:14 2016 -0800

    Fix doc syntax, Java 8 does not like it

commit d006a0e8fc78f4f06d8261e13d239cfacbc37cb9
Author: AndreMantas <andremantas7@gmail.com>
Date:   Sun Jan 10 18:30:02 2016 +0000

    Reviewer: @rizard @rlane @Sovietaced

    Duplicated the behaviour in OFFlow*_setActions, version 1.3 for versions 1.1, 1.2 and 1.4

commit 6d333f1d336f5ac27cb02d4b33440480f355be91
Merge: d1e2389 5abb5af
Author: abat <abat@bigswitch.com>
Date:   Tue Jan 5 14:01:41 2016 -0800

    Merge into master from pull request #451:
    OF1.4 table features bug fix (https://github.com/floodlight/loxigen/pull/451)

commit 5abb5af6b1cf5b91fa116db9f31f3180622fc508
Author: Ryan Izard <rizard@g.clemson.edu>
Date:   Mon Jan 4 12:14:47 2016 -0500

    Fixed OF1.4 table features properties byte alignment. Now byte aligned to 8 bytes.

commit d1e2389d8ce58209270d135db1f08e096b46a427
Merge: 9ecc398 22ef95b
Author: abat <abat@bigswitch.com>
Date:   Fri Dec 18 15:50:29 2015 -0800

    Merge into master from pull request #450:
    Async request patch for OF1.3 and OF1.4 (https://github.com/floodlight/loxigen/pull/450)

commit 22ef95b8af95331bb0d92cb05cd23aba3869f26d
Author: Ryan Izard <rizard@g.clemson.edu>
Date:   Fri Dec 18 17:10:58 2015 -0500

    Async request messages do not have any body, only the OF header w/async request type.

commit 9ecc3981a61fb13c40aeb910f1d2c86fb04aa021
Merge: d593d01 7ba8173
Author: abat <abat@bigswitch.com>
Date:   Fri Dec 4 12:47:24 2015 -0800

    Merge into master from pull request #441:
    Add of_bsn_base_error and of_bsn_error. (https://github.com/floodlight/loxigen/pull/441)

commit d593d0135fc000a63fcd4faf840817778f2448d8
Merge: 09462b2 99c6d9d
Author: abat <abat@bigswitch.com>
Date:   Tue Dec 1 17:05:47 2015 -0800

    Merge into master from pull request #449:
    java: generate setters for unwriteable fields LOXI-76 (https://github.com/floodlight/loxigen/pull/449)

commit 99c6d9d999a65cbf3b1eb6e16c543451b5b56c2d
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Dec 1 16:43:43 2015 -0800

    Only generate virtual setters where necessary LOXI-76

    The previous commit would add virtual Exception-raising setters
    globally. This commit adds a method that specifically checks whether
    a setter is necessary.

    A setter must be generated if the field is writeable in this class
    or any super class. Fields can turn non-writeable in a subclass
    if a superclass data member is used as a discriminator.

commit 1c8f7eef0e2cb719b0d670a4b55c6dc7ce068fd0
Merge: 2268d5c 09462b2
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Dec 1 16:29:29 2015 -0800

    Merge remote-tracking branch 'upstream/master' into unwriteable-setters

commit 09462b29cd92c807e7c7776702efec6f26afadf6
Merge: 3cbb8c7 4d8392d
Author: abat <abat@bigswitch.com>
Date:   Mon Nov 30 12:26:36 2015 -0800

    Merge into master from pull request #448:
    Packet-in reason for reserved multicast packets. (https://github.com/floodlight/loxigen/pull/448)

commit 4d8392dd20c6a169f899546e49144bddd497147b
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Mon Nov 30 12:21:14 2015 -0800

    Packet-in reason for reserved multicast packets.

commit 3cbb8c7a915d9ce691fb7c3de06749c61cc54e4a
Merge: 0ba42d4 3850039
Author: abat <abat@bigswitch.com>
Date:   Fri Nov 20 09:23:51 2015 -0800

    Merge into master from pull request #447:
    Match: consistently hide Fields w/ broken prereqs LOXI-75 (https://github.com/floodlight/loxigen/pull/447)

commit 385003977cf417663f573ec41fba325cfbced40b
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Thu Nov 19 19:44:51 2015 -0800

    Match: consistently hide Fields w/ broken prereqs LOXI-75

    Previously, isExact(), isPartiallyMasked() and isFullyWildcarded()
    did not check whether the required prerequisites for a field
    had been set. get() and getMasked() did, leading to inconsistent
    results / NPEs.

    This makes all of the methods honor the prerequisite checks.
    It also adds a unit test checking the behavior.

commit 0ba42d48ae4714ea0022906e74819d1ed556c4a7
Merge: 56666f9 4c35527
Author: abat <abat@bigswitch.com>
Date:   Wed Nov 11 18:52:43 2015 -0800

    Merge into master from pull request #446:
    Modified EUI-64 format interface identifier utilities in IPv6Address LOXI-74 (https://github.com/floodlight/loxigen/pull/446)

commit 4c3552750bbed4a07cf591f57df4c118c4c24865
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Wed Nov 11 18:47:49 2015 -0800

    LOXI-74 More parentheses dressing...

commit 6cef30d77d31b31e36b3dd31bd3e0edd0ca0b8c2
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Wed Nov 11 18:36:22 2015 -0800

    LOXI-74 More parentheses

    Reference:
    https://github.com/floodlight/loxigen/pull/446#discussion-diff-44615571

commit 381983045ff2db675e15397780cc8dfa226f2b99
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Wed Nov 11 18:32:37 2015 -0800

    LOXI-74 Added parentheses as @andi-bigswitch suggested

    Reference:
    https://github.com/floodlight/loxigen/pull/446#discussion-diff-44615571

commit f0943e11036dc0173791487be3f8e48cc4a16661
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Tue Nov 10 20:24:58 2015 -0800

    LOXI-74 Nonnull annotation

commit f0d990ae7d7395f4d834de3247e624ac9816b83a
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Tue Nov 10 20:21:09 2015 -0800

    LOXI-74 Unit tests for the new Modified EUI-64 methods

commit 0785c92563fcf689d303b1c7120c5d81215211fd
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Tue Nov 10 19:22:10 2015 -0800

    LOXI-74 renamed isDerivedFrom() to isModifiedEui64Derived()

commit f3efa989e3e6a96caa312e4579e7247c3aade742
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Tue Nov 10 19:09:45 2015 -0800

    LOXI-74 IPv6AddressWithMask.LINK_LOCAL_NETWORK and .LINK_LOCAL_RESERVED

commit 310753a6682873ccf583964d91561bdf5b14e16b
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Tue Nov 10 18:38:41 2015 -0800

    LOXI-74 Added IPv6Address.of() to create MAC address derived IPv6Address

commit a05df970877e382a71cc19697ffdbe8a7f8dc602
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Tue Nov 10 17:18:30 2015 -0800

    LOXI-74 Added util to check if an IPv6 address is derived from the
    specified MAC address

commit 81091dea0998b24601af062db24cb5b8f04aba59
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Tue Nov 10 16:36:30 2015 -0800

    LOXI-74 Added util to convert MAC addresses to Modified EUI-64
    format interface identifiers

commit 56666f9ed43c8623901166eb659a44e9bd20ad89
Merge: 85698af 6a9203d
Author: abat <abat@bigswitch.com>
Date:   Fri Nov 6 16:03:43 2015 -0800

    Merge into master from pull request #445:
    Add link_up and link_down counters to ofp_bsn_port_counter. (https://github.com/floodlight/loxigen/pull/445)

commit 6a9203de1ad95bbf1ee0c755d6f5e4dc5d70e493
Author: Ken Chiang <ken.chiang@bigswitch.com>
Date:   Fri Nov 6 16:00:55 2015 -0800

    Add link_up and link_down counters to ofp_bsn_port_counter.

commit 85698af624ea341a4e7a1bd868c49f0d649c73a2
Merge: a34310f 3d367f3
Author: abat <abat@bigswitch.com>
Date:   Fri Nov 6 15:42:38 2015 -0800

    Merge into master from pull request #444:
    Status TLV. (https://github.com/floodlight/loxigen/pull/444)

commit 3d367f3de55b7715ceb628aebecbd13af9cdfd82
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Fri Nov 6 15:37:26 2015 -0800

    Status TLV.

commit a34310f77da4131fa1da882368ab78d524bc2efe
Merge: ce2f5b4 70a4ac2
Author: abat <abat@bigswitch.com>
Date:   Fri Nov 6 14:21:28 2015 -0800

    Merge into master from pull request #443:
    wireshark: rename to avoid conflict with upstream dissector (https://github.com/floodlight/loxigen/pull/443)

commit 70a4ac2c113982c66853050e9f31d88c56f7e1f2
Author: Rich Lane <rlane@bigswitch.com>
Date:   Fri Nov 6 14:11:56 2015 -0800

    wireshark: rename to avoid conflict with upstream dissector

    Newer versions of Wireshark crash (!) because of the name conflict.

commit ce2f5b46d369446ce05b4e893a834b98c2b5c5a8
Merge: fb90801 7ec7150
Author: abat <abat@bigswitch.com>
Date:   Fri Nov 6 09:44:20 2015 -0800

    Merge into master from pull request #442:
    Add use_packet_state tlv. (https://github.com/floodlight/loxigen/pull/442)

commit 7ec715088332371de515e6cb73fc1408c8c59541
Author: Wilson Ng <wilson.ng@bigswitch.com>
Date:   Wed Nov 4 16:09:07 2015 -0800

    Add use_packet_state tlv.

commit 7ba81736eae4bb96fd9599dcca288145b1e462f3
Author: Ken Chiang <ken.chiang@bigswitch.com>
Date:   Wed Oct 28 17:56:32 2015 -0700

    Add of_bsn_base_error and of_bsn_error.

commit fb90801d4d2e9ba5ba10803d2d0dd03665cd9988
Merge: b3b3cfd 1a3a98f
Author: abat <abat@bigswitch.com>
Date:   Tue Oct 27 14:13:50 2015 -0700

    Merge into master from pull request #440:
    IPAddress boolean and factory methods (https://github.com/floodlight/loxigen/pull/440)

commit 1a3a98fff73ce58097264d6652a2181877935174
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Fri Oct 23 18:01:18 2015 -0700

    Added factory method IPv4Address.of(int, int, int, int)

commit 536dda87a1be9df3dc5f20b92cb8f6abb3924b1f
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Thu Oct 22 17:16:29 2015 -0700

    Added IPAddress#isLinkLocal() to test for link local addresses

commit 2268d5cae414af47b0be4bd254106ebe2d1924f5
Author: Rich Lane <rlane@bigswitch.com>
Date:   Mon Oct 26 16:07:16 2015 -0700

    java: generate setters for unwriteable fields

    https://github.com/floodlight/loxigen/pull/438 ran into a problem when we tried
    to use a field as a discriminator when it was a normal data member in the
    superclass. The java compiler complained that we hadn't provided an
    implementation of the setter in the concrete class.

    This change fixes the problem by creating setters for unwriteable fields which
    throw an exception, like we do when the field isn't available in the OpenFlow
    version.

    This obviously adds the setters in more places than necessary. We could
    possibly optimize this by checking each ancestor class to see if the field
    changed writeability and only emit a setter in that special case.

commit b3b3cfd16d43bea9a59a40e185b58781ace14ad2
Merge: 8b8ac26 5bc9c8c
Author: abat <abat@bigswitch.com>
Date:   Mon Oct 26 10:31:43 2015 -0700

    Merge into master from pull request #427:
    Change toString() of OFMetadata (https://github.com/floodlight/loxigen/pull/427)

commit 88a5ea5e01d2f68994b83c86239f1c304d05823b
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Thu Oct 22 16:01:42 2015 -0700

    Added IPAddress#isLoopback() to test for loopback addresses

commit bbd1434a4ad9d69d1d2e75a52e66eaec61539069
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Thu Oct 22 14:53:55 2015 -0700

    Added IPAddress#isUnspecified() to test for wildcard addresses

commit 8b8ac26edf425e61e34ec4a2e05f6505034569e2
Merge: 4d76743 3c99cdb
Author: abat <abat@bigswitch.com>
Date:   Thu Oct 22 12:38:19 2015 -0700

    Merge into master from pull request #437:
    Added IPAddress#toInetAddress() convenience method (https://github.com/floodlight/loxigen/pull/437)

commit 3c99cdb2767001373decc7a3277a676d26aed74e
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Thu Oct 22 11:07:27 2015 -0700

    Implement IPAddress#toInetAddress() directly in subclasses as suggested
    by @andi-bigswitch

commit 79e06021411f96bdee9862342aab4b3985228036
Author: Ronald Li <ronald.li@bigswitch.com>
Date:   Wed Oct 21 16:29:04 2015 -0700

    Added IPAddress#toInetAddress() convenience method

commit 4d767431da6a92023a3db1c77f380451033fc7e0
Merge: 845949f c865b32
Author: abat <abat@bigswitch.com>
Date:   Mon Oct 19 13:39:25 2015 -0700

    Merge into master from pull request #435:
    add vxlan src ip lookup failure pktin reason (https://github.com/floodlight/loxigen/pull/435)

commit 845949f425dd6c341190c8c3d6bf9f307ab626f7
Merge: 6aa62c3 68835b2
Author: abat <abat@bigswitch.com>
Date:   Mon Oct 19 13:25:30 2015 -0700

    Merge into master from pull request #436:
    New TLV multicast_interface_id. (https://github.com/floodlight/loxigen/pull/436)

commit 68835b2a5709b62ef9a859adb21ee87049e1e241
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Mon Oct 19 11:12:23 2015 -0700

    New TLV multicast_interface_id.

commit c865b325c48174def2e26f215bb46cb0955fcf79
Author: Harshmeet Singh <harshmeet.singh@bigswitch.com>
Date:   Sun Oct 18 20:43:32 2015 -0700

    add vxlan src ip lookup failure pktin reason

commit 6aa62c3904f8a9d74642e401e173a656038acb53
Merge: 0e761f7 2f620ff
Author: abat <abat@bigswitch.com>
Date:   Fri Oct 16 14:18:28 2015 -0700

    Merge into master from pull request #434:
    Major oversight in test and typo (https://github.com/floodlight/loxigen/pull/434)

commit 2f620ff72f93476fb915931c61a37aeeec38fd79
Author: Sovietaced <Sovietaced@gmail.com>
Date:   Fri Oct 16 17:05:15 2015 -0400

    oops

commit 0e761f71aaccd4d4e41a49838b80575e4cf91157
Merge: e9ce4eb 285e38c
Author: abat <abat@bigswitch.com>
Date:   Fri Oct 16 03:00:38 2015 -0700

    Merge into master from pull request #432:
    Refactor MacAddress class to handle other string formats (https://github.com/floodlight/loxigen/pull/432)

commit e9ce4ebe1a9d86fbeb308c91cc5ad6fa8b30c95c
Merge: 952e8e5 4cd7376
Author: abat <abat@bigswitch.com>
Date:   Thu Oct 15 16:18:30 2015 -0700

    Merge into master from pull request #433:
    add nexthop_type_vxlan tlv for ecmp gentable (https://github.com/floodlight/loxigen/pull/433)

commit 4cd73764d45761b6ad0213c9d8b595b082bfd116
Author: Harshmeet Singh <harshmeet.singh@bigswitch.com>
Date:   Thu Oct 15 16:09:16 2015 -0700

    add nexthop_type_vxlan tlv for ecmp gentable

commit 285e38cec1c559adfc83f534b970fff8fe1b9626
Author: Sovietaced <Sovietaced@gmail.com>
Date:   Thu Oct 15 18:46:28 2015 -0400

    address comments

commit 13631ecf4787ac2b6357aae46240696f9b17d2a4
Author: Sovietaced <Sovietaced@gmail.com>
Date:   Thu Oct 15 02:30:01 2015 -0400

    fix compilation and update tests

commit 9797a402cad576329aa156b178321c88977e2991
Author: Sovietaced <Sovietaced@gmail.com>
Date:   Thu Oct 15 01:54:20 2015 -0400

    update MacAddress to take other formats of mac strings

commit 952e8e526d2ef773ebab8e684b288b06c2ec2f83
Merge: d2da0a8 d5e1855
Author: abat <abat@bigswitch.com>
Date:   Thu Oct 8 16:56:20 2015 -0700

    Merge into master from pull request #431:
    IGMP and PIM packet-in reasons. (https://github.com/floodlight/loxigen/pull/431)

commit d5e18559eb419da54127d16885cb7e87ac694330
Author: Kiran Poola <kiran.poola@bigswitch.com>
Date:   Thu Oct 8 05:30:58 2015 -0700

    IGMP and PIM packet-in reasons.

commit d2da0a89ad6bde3e6d6ef9080b210aebf7f9c996
Merge: 026a4ac f61e88b
Author: abat <abat@bigswitch.com>
Date:   Fri Oct 2 13:46:40 2015 -0700

    Merge into master from pull request #430:
    openflow_input: add storm control TLVs (https://github.com/floodlight/loxigen/pull/430)

commit f61e88b0c3bc4306534fd2f71e800691f4b01032
Author: Rich Lane <rlane@bigswitch.com>
Date:   Fri Oct 2 13:05:23 2015 -0700

    openflow_input: add storm control TLVs

commit 026a4ac3f7f874dbab74a4df2e2802524a4134a0
Merge: 0349f5d 2255996
Author: abat <abat@bigswitch.com>
Date:   Thu Oct 1 16:03:33 2015 -0700

    Merge into master from pull request #429:
    add vxlan tlvs (https://github.com/floodlight/loxigen/pull/429)

commit 2255996a6a7fc1ad8455152c87736ec7cde0a958
Author: Harshmeet Singh <harshmeet.singh@bigswitch.com>
Date:   Thu Oct 1 15:23:14 2015 -0700

    change from port_vxlan_flags to port_vxlan_mode

commit 3bf95229722f7a91258b89aa90c8856171d30627
Author: Harshmeet Singh <harshmeet.singh@bigswitch.com>
Date:   Thu Oct 1 11:44:28 2015 -0700

    add vxlan tlvs

commit 0349f5dc63091b98b7c11b883b43a0bc55f50cc4
Merge: c4e0b43 3ed8036
Author: abat <abat@bigswitch.com>
Date:   Thu Oct 1 10:29:40 2015 -0700

    Merge into master from pull request #428:
    openflow_input: add decap TLV (https://github.com/floodlight/loxigen/pull/428)

commit 3ed80360df641040d681aa6cec67ba1ed38abb30
Author: Rich Lane <rlane@bigswitch.com>
Date:   Tue Sep 29 12:49:59 2015 -0700

    openflow_input: add decap TLV

commit 5bc9c8cc8570b752b20e2f43915c6bc027a2de6e
Author: Ryan Izard <ryan.izard@bigswitch.com>
Date:   Mon Sep 28 08:30:15 2015 -0400

    Fix toString() of OFMetadata to not include the string 'Metadata:' before the value. No other type does this to my knowledge. We should probably remove it to be consistent with e.g. MacAddress, which is a hex string 'XX:XX:XX:XX:XX:XX', not 'MAC Address: XX:XX:XX:XX:XX:XX'.

commit c4e0b4396f3fc4598e537e3ce85c5159fe9bc213
Merge: e16f4a7 72c59ea
Author: abat <abat@bigswitch.com>
Date:   Mon Sep 21 16:05:21 2015 -0700

    Merge into master from pull request #422:
    openflowj: update to netty 4 (https://github.com/floodlight/loxigen/pull/422)

commit 72c59ea65289d8f55e4c6d051405c48ff51f471b
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Mon Sep 21 15:45:38 2015 -0700

    java/pom.xml: Update netty to 4.0.31

commit 9ba8462d1cd36a2f94ea5a5fe67060296f4fc231
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Tue Sep 8 04:21:36 2015 -0700

    java_gen: pom.xml - update version to 2.0.0 - SNAPSHOT

commit 69d624dec2f42a198dd100d1c92bc8f0f3c6b59d
Author: Andreas Wundsam <andreas.wundsam@bigswitch.com>
Date:   Thu Feb 6 18:12:12 2014 -0800

    openflowj: update to netty 4

    This commit updates openflowj to use netty 4.0.30. Also adapts
    to the API changes in netty4:

     - package root renamed from org.jboss.netty to io.netty
     - ChannelBuffer renamed to ByteBuf
     - ChannelBuffers renamed to Unpooled
     - ChannelBuffers.dynamicBuffer() renamed to Unpooled.buffer()

commit e16f4a7025feba2cd7c6508e38258b096db58f53
Merge: 3030a39 50c5e1e
Author: abat <abat@bigswitch.com>
Date:   Mon Sep 21 12:35:40 2015 -0700

    Merge into master from pull request #424:
    add VxLAN Network Identifier type to the Openflow library (https://github.com/floodlight/loxigen/pull/424)

commit 50c5e1e817711c9820798391b712612a31128419
Author: Sarath Kumar <Sarath Kumar>
Date:   Fri Sep 18 14:49:35 2015 -0700

    vxlan_ni updates in java_type.py file

commit b4060e42edcb879467dbdc594c8c6502812a35f4
Author: Sarath Kumar <Sarath Kumar>
Date:   Fri Sep 18 13:57:56 2015 -0700

    changed length to 4
    updated type in MatchField

commit 962cd5c8f43ea66e478873be91ff7d4a2b1fcc48
Author: Sarath Kumar <Sarath Kumar>
Date:   Thu Sep 17 18:32:55 2015 -0700

    add VxLAN Network Identifier type to the Openflow library

commit 3030a39d5a52f198ef997d6b1e0f41a33e48511b
Merge: 4776c8a 0f9126c
Author: abat <abat@bigswitch.com>
Date:   Tue Sep 15 16:26:40 2015 -0700

    Merge into master from pull request #420:
    Added static function to generate macAddress from IPv4 Multicast address (https://github.com/floodlight/loxigen/pull/420)

commit 0f9126c1da22fc8d5003e46fb5535127d8f2abf1
Merge: 5cd56cb 4776c8a
Author: Mary Manohar <mary.manohar@bigswitch.com>
Date:   Tue Sep 15 16:14:35 2015 -0700

    Merge remote-tracking branch 'bigswitch/master' into my-loxigen

commit 5cd56cb61cb5ce8e727bb67e3c09d68c59a8c421
Author: Mary Manohar <mary.manohar@bigswitch.com>
Date:   Tue Sep 15 16:13:28 2015 -0700

    Fixed code review comments

commit fbc111d2804fce865b1a010dfaa5ca1685bc7a22
Author: Mary Manohar <mary.manohar@bigswitch.com>
Date:   Wed Sep 9 17:01:28 2015 -0700

    Fixed compilation error

commit 989491e689e464a06852bd9193eef58110135429
Author: Mary Manohar <mary.manohar@bigswitch.com>
Date:   Wed Sep 9 16:51:26 2015 -0700

    Fixed compilation warning

commit faf22f589f27b20335175699f1d226bef648f970
Author: Mary Manohar <mary.manohar@bigswitch.com>
Date:   Wed Sep 9 16:38:20 2015 -0700

    Fixed review comments and added JUnit testcases

commit 4776c8a61ae3bb101f06453045ee7eccef86b71e
Merge: 6085236 0978325
Author: abat <abat@bigswitch.com>
Date:   Thu Sep 3 17:47:40 2015 -0700

    Merge into master from pull request #421:
    openflow_input: add message of_bsn_vlan_counter_clear (https://github.com/floodlight/loxigen/pull/421)

commit 09783252e8937a9c28e5cdad514db3682859cf32
Author: Rich Lane <rlane@bigswitch.com>
Date:   Thu Sep 3 17:39:25 2015 -0700

    openflow_input: add message of_bsn_vlan_counter_clear

    This message clears the stats reported by the extension for the given VLAN.

commit c90917117a8df05131f67a8ed693e081a7ce466c
Author: Mary Manohar <mary.manohar@bigswitch.com>
Date:   Fri Aug 28 15:05:12 2015 -0700

    Added static function to generate macAddress from IPv4 Multicast address.

Fix optical port description to align to standard

See tx_pwr_min, tx_pwr_max type

/* Optical port description property. */
struct ofp_port_desc_prop_optical {
uint16_t type; /* OFPPDPT_3OPTICAL. */
uint16_t length; /* Length in bytes of this property. */
uint8_t pad[4]; /* Align to 64 bits. */
uint32_t supported; /* Features supported by the port. */
uint32_t tx_min_freq_lmda; /* Minimum TX Frequency/Wavelength */
uint32_t tx_max_freq_lmda; /* Maximum TX Frequency/Wavelength */
uint32_t tx_grid_freq_lmda; /* TX Grid Spacing Frequency/Wavelength */
uint32_t rx_min_freq_lmda; /* Minimum RX Frequency/Wavelength */
uint32_t rx_max_freq_lmda; /* Maximum RX Frequency/Wavelength */
uint32_t rx_grid_freq_lmda; /* RX Grid Spacing Frequency/Wavelength */
uint16_t tx_pwr_min; /* Minimum TX power */
uint16_t tx_pwr_max; /* Maximum TX power */
};
OFP_ASSERT(sizeof(struct ofp_port_desc_prop_optical) == 40);

Was-ChangeId: I1c1418b9d0acd8bf7d21fa6d1ea5d7af0598e149
Change-Id: Id69c8597eb4564653c56cdc90f2dcec50afbdd25
diff --git a/openflow_input/bsn-1.3 b/openflow_input/bsn-1.3
index 5ad480c..720f933 100644
--- a/openflow_input/bsn-1.3
+++ b/openflow_input/bsn-1.3
@@ -27,6 +27,7 @@
 
 #version 4
 #version 5
+#version 6
 
 // BSN extension instruction
 struct of_instruction_bsn : of_instruction_experimenter {
@@ -36,3 +37,29 @@
     uint32_t subtype == ?;
     pad(4);
 };
+
+// BSN base error message
+struct of_bsn_base_error : of_experimenter_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 0xffff;
+    uint16_t subtype == ?;
+    uint32_t experimenter == 0x5c16c7;
+    of_desc_str_t err_msg;
+    of_octets_t data;
+};
+
+// BSN error message
+struct of_bsn_error : of_bsn_base_error {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 0xffff;
+    uint16_t subtype == 1;
+    uint32_t experimenter == 0x5c16c7;
+    of_desc_str_t err_msg;
+    of_octets_t data;
+};
diff --git a/openflow_input/bsn-1.4 b/openflow_input/bsn-1.4
index c64a70a..522dc46 100644
--- a/openflow_input/bsn-1.4
+++ b/openflow_input/bsn-1.4
@@ -1,4 +1,4 @@
-// Copyright 2015, Big Switch Networks, Inc.
+// Copyright 2015-2016, Big Switch Networks, Inc.
 //
 // LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
 // the following special exception:
@@ -26,6 +26,7 @@
 // under the EPL.
 
 #version 5
+#version 6
 
 struct of_port_desc_prop_bsn : of_port_desc_prop_experimenter {
     uint16_t type == 0xffff;
@@ -33,3 +34,10 @@
     uint32_t experimenter == 0x5c16c7;
     uint32_t exp_type == ?;
 };
+
+struct of_queue_desc_prop_bsn : of_queue_desc_prop_experimenter {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t exp_type == ?;
+};
diff --git a/openflow_input/bsn-1.5 b/openflow_input/bsn-1.5
new file mode 100644
index 0000000..3438dc8
--- /dev/null
+++ b/openflow_input/bsn-1.5
@@ -0,0 +1,44 @@
+// Copyright 2015, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
+// the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may distribute libraries
+// generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
+// that copyright and licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i) included in
+// the LoxiGen Libraries, if distributed in source code form and (ii) included in any
+// documentation for the LoxiGen Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
+// a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// EPL for the specific language governing permissions and limitations
+// under the EPL.
+
+#version 6
+
+struct of_queue_stats_prop_bsn : of_queue_stats_prop_experimenter {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t exp_type == 0; // 0 is written for test - fix me ?
+    of_octets_t experimenter_data;
+};
+
+struct of_role_prop_bsn : of_role_prop_experimenter {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t exp_type == 55; // 55 is taken from bsn_role_status - fix me ?
+    of_octets_t experimenter_data;
+};
\ No newline at end of file
diff --git a/openflow_input/bsn_acl b/openflow_input/bsn_acl
index bcca842..aad478f 100644
--- a/openflow_input/bsn_acl
+++ b/openflow_input/bsn_acl
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 // Instructions to express control flow in ACL tables
 
diff --git a/openflow_input/bsn_arp_idle b/openflow_input/bsn_arp_idle
index 16a1782..030bade 100644
--- a/openflow_input/bsn_arp_idle
+++ b/openflow_input/bsn_arp_idle
@@ -36,6 +36,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_bsn_arp_idle : of_bsn_header {
     uint8_t version;
diff --git a/openflow_input/bsn_arp_offload b/openflow_input/bsn_arp_offload
index f13f6ac..864c38c 100644
--- a/openflow_input/bsn_arp_offload
+++ b/openflow_input/bsn_arp_offload
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_arp_offload : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_auto_negotiation b/openflow_input/bsn_auto_negotiation
index 68116cf..119d047 100644
--- a/openflow_input/bsn_auto_negotiation
+++ b/openflow_input/bsn_auto_negotiation
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_auto_negotiation : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_aux_cxns b/openflow_input/bsn_aux_cxns
index 8ceaa72..4c2f98f 100644
--- a/openflow_input/bsn_aux_cxns
+++ b/openflow_input/bsn_aux_cxns
@@ -29,6 +29,7 @@
 //
 #version 4
 #version 5
+#version 6
 
 // Set the number of desired aux connections num_aux=(0-16) accompanying this main connection
 // This message is only allowed on the main connection. 
diff --git a/openflow_input/bsn_controller_connections b/openflow_input/bsn_controller_connections
index 845d3b8..8369551 100644
--- a/openflow_input/bsn_controller_connections
+++ b/openflow_input/bsn_controller_connections
@@ -38,6 +38,7 @@
 
 #version 4
 #version 5
+#version 6
 
 enum ofp_bsn_controller_connection_state(wire_type=uint8_t) {
     OFP_BSN_CONTROLLER_CONNECTION_STATE_DISCONNECTED = 0,
diff --git a/openflow_input/bsn_debug_counter b/openflow_input/bsn_debug_counter
index 6c28b87..bea6cf8 100644
--- a/openflow_input/bsn_debug_counter
+++ b/openflow_input/bsn_debug_counter
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 // Switches have many non-dataplane counters that are mainly useful for
 // debugging. An example is the number of packet-ins dropped due to
diff --git a/openflow_input/bsn_dhcp_offload b/openflow_input/bsn_dhcp_offload
index 5352754..5a14a51 100644
--- a/openflow_input/bsn_dhcp_offload
+++ b/openflow_input/bsn_dhcp_offload
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_dhcp_offload : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_disable_l3 b/openflow_input/bsn_disable_l3
index 29d8ad1..389fc65 100644
--- a/openflow_input/bsn_disable_l3
+++ b/openflow_input/bsn_disable_l3
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_disable_l3 : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_disable_src_mac_check b/openflow_input/bsn_disable_src_mac_check
index 6b095ca..cfe15b1 100644
--- a/openflow_input/bsn_disable_src_mac_check
+++ b/openflow_input/bsn_disable_src_mac_check
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_disable_src_mac_check : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_disable_vlan_counters b/openflow_input/bsn_disable_vlan_counters
index e586917..15fbca2 100644
--- a/openflow_input/bsn_disable_vlan_counters
+++ b/openflow_input/bsn_disable_vlan_counters
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_disable_vlan_counters : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_egr_port_group_id b/openflow_input/bsn_egr_port_group_id
index 3ba5462..73c6be6 100644
--- a/openflow_input/bsn_egr_port_group_id
+++ b/openflow_input/bsn_egr_port_group_id
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * Egress port group ID for SwitchLight
diff --git a/openflow_input/bsn_flow_checksum b/openflow_input/bsn_flow_checksum
index 35b658f..c4f9488 100644
--- a/openflow_input/bsn_flow_checksum
+++ b/openflow_input/bsn_flow_checksum
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 // Retrieves the checksum for every bucket in a table. The entries are ordered
 // by bucket index.
diff --git a/openflow_input/bsn_flow_idle b/openflow_input/bsn_flow_idle
index e0139e2..6c6f3a8 100644
--- a/openflow_input/bsn_flow_idle
+++ b/openflow_input/bsn_flow_idle
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 /*
  * Notification of idle flows
diff --git a/openflow_input/bsn_forward_error_correction b/openflow_input/bsn_forward_error_correction
new file mode 100644
index 0000000..1f91732
--- /dev/null
+++ b/openflow_input/bsn_forward_error_correction
@@ -0,0 +1,38 @@
+// Copyright 2016, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
+// the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may distribute libraries
+// generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
+// that copyright and licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i) included in
+// the LoxiGen Libraries, if distributed in source code form and (ii) included in any
+// documentation for the LoxiGen Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
+// a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// EPL for the specific language governing permissions and limitations
+// under the EPL.
+
+#version 5
+#version 6
+
+struct of_port_desc_prop_bsn_forward_error_correction : of_port_desc_prop_bsn {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t exp_type == 2;
+    uint32_t configured;    /* non-zero if FEC is configured */
+    uint32_t enabled;       /* non-zero if FEC is enabled */
+};
diff --git a/openflow_input/bsn_generic_async b/openflow_input/bsn_generic_async
index 7d7ee98..b163079 100644
--- a/openflow_input/bsn_generic_async
+++ b/openflow_input/bsn_generic_async
@@ -29,6 +29,7 @@
 // governing permissions and limitations under the EPL.
 
 #version 5
+#version 6
 
 // This extension provides flexibility for async messages like gentable
 // does for table programming.
diff --git a/openflow_input/bsn_generic_command b/openflow_input/bsn_generic_command
new file mode 100644
index 0000000..ad0f93b
--- /dev/null
+++ b/openflow_input/bsn_generic_command
@@ -0,0 +1,46 @@
+// Copyright 2016, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License,
+// version 1.0 (EPL), with the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may
+// distribute libraries generated by LoxiGen (LoxiGen Libraries)
+// under the terms of your choice, provided that copyright and
+// licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i)
+// included in the LoxiGen Libraries, if distributed in source code
+// form and (ii) included in any documentation for the LoxiGen
+// Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2015, Big Switch Networks, Inc.
+// This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or
+// LOXI Exception. You may obtain a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an "AS
+// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+// express or implied. See the EPL for the specific language
+// governing permissions and limitations under the EPL.
+
+#version 5
+#version 6
+
+// This extension provides flexibility for command messages like gentable
+// does for table programming.
+
+struct of_bsn_generic_command : of_bsn_header {
+    uint8_t version;
+    uint8_t type == 4;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t subtype == 71;
+    of_str64_t name;
+    list(of_bsn_tlv_t) tlvs;
+};
diff --git a/openflow_input/bsn_generic_stats b/openflow_input/bsn_generic_stats
index b67d8e3..ad195cf 100644
--- a/openflow_input/bsn_generic_stats
+++ b/openflow_input/bsn_generic_stats
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 // This extension provides flexibility for stats requests like gentable
 // does for table programming.
diff --git a/openflow_input/bsn_gentable b/openflow_input/bsn_gentable
index 556ae0b..e0753c0 100644
--- a/openflow_input/bsn_gentable
+++ b/openflow_input/bsn_gentable
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 // We have a number of switch agents that need to be configured by the
 // controller and report stats. Some of them will have large tables (1000+
@@ -86,7 +87,7 @@
     uint32_t experimenter == 0x5c16c7;
     uint32_t subtype == 46;
     uint16_t table_id;
-    uint16_t key_length;
+    uint16_t key_length == length(key);
     of_checksum_128_t checksum;
     list(of_bsn_tlv_t) key;
     list(of_bsn_tlv_t) value;
@@ -181,7 +182,7 @@
 
 struct of_bsn_gentable_entry_desc_stats_entry {
     uint16_t length;
-    uint16_t key_length;
+    uint16_t key_length == length(key);
     of_checksum_128_t checksum;
     list(of_bsn_tlv_t) key;
     list(of_bsn_tlv_t) value;
@@ -224,7 +225,7 @@
 
 struct of_bsn_gentable_entry_stats_entry {
     uint16_t length;
-    uint16_t key_length;
+    uint16_t key_length == length(key);
     list(of_bsn_tlv_t) key;
     list(of_bsn_tlv_t) stats;
 };
@@ -362,3 +363,24 @@
     uint32_t table_id;
     list(of_bsn_tlv_t) key;
 };
+
+enum of_bsn_gentable_error_code(wire_type=uint16_t) {
+    OF_BSN_GENTABLE_ERROR_UNKNOWN = 0,
+    OF_BSN_GENTABLE_ERROR_PARAM = 1,  // invalid parameter
+    OF_BSN_GENTABLE_ERROR_TABLE_FULL = 2,
+};
+
+// BSN gentable error message
+struct of_bsn_gentable_error : of_bsn_base_error {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 0xffff;
+    uint16_t subtype == 2;
+    uint32_t experimenter == 0x5c16c7;
+    enum of_bsn_gentable_error_code error_code;
+    uint16_t table_id;
+    of_desc_str_t err_msg;
+    of_octets_t data;
+};
diff --git a/openflow_input/bsn_hash_select b/openflow_input/bsn_hash_select
new file mode 100644
index 0000000..edd9aeb
--- /dev/null
+++ b/openflow_input/bsn_hash_select
@@ -0,0 +1,49 @@
+// Copyright 2016, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
+// the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may distribute libraries
+// generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
+// that copyright and licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i) included in
+// the LoxiGen Libraries, if distributed in source code form and (ii) included in any
+// documentation for the LoxiGen Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2016, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
+// a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// EPL for the specific language governing permissions and limitations
+// under the EPL.
+//
+// Also derived from the OpenFlow header files which have these copyrights:
+// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+// Copyright (c) 2011, 2012 Open Networking Foundation
+
+#version 4
+#version 5
+#version 6
+
+// Instructions to express control of hash selection in ACL tables
+
+enum ofp_bsn_hash_select_flags(wire_type=uint32_t, bitmask=True) {
+    OFP_BSN_HASH_SELECT_SRC_IP = 0x1,
+    OFP_BSN_HASH_SELECT_DST_IP = 0x2,
+};
+
+struct of_instruction_bsn_hash_select : of_instruction_bsn {
+    uint16_t type == 65535;
+    uint16_t len;
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t subtype == 15;
+    enum ofp_bsn_hash_select_flags flags;
+};
diff --git a/openflow_input/bsn_image b/openflow_input/bsn_image
index fafe8d8..03cdb34 100644
--- a/openflow_input/bsn_image
+++ b/openflow_input/bsn_image
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_bsn_image_desc_stats_request : of_bsn_stats_request {
     uint8_t version;
diff --git a/openflow_input/bsn_in_ports b/openflow_input/bsn_in_ports
index bb4c030..132d6d6 100644
--- a/openflow_input/bsn_in_ports
+++ b/openflow_input/bsn_in_ports
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * Bitmap of input ports
diff --git a/openflow_input/bsn_ingress_port_group_id b/openflow_input/bsn_ingress_port_group_id
index 5e1ad97..9d4eae3 100644
--- a/openflow_input/bsn_ingress_port_group_id
+++ b/openflow_input/bsn_ingress_port_group_id
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * Ingress port group ID for SwitchLight
diff --git a/openflow_input/bsn_inner_eth_dst b/openflow_input/bsn_inner_eth_dst
index d3e9fa9..c6cec4b 100644
--- a/openflow_input/bsn_inner_eth_dst
+++ b/openflow_input/bsn_inner_eth_dst
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 /*
  * Inner ethernet destination MAC
diff --git a/openflow_input/bsn_inner_eth_src b/openflow_input/bsn_inner_eth_src
index 36e0e35..362447d 100644
--- a/openflow_input/bsn_inner_eth_src
+++ b/openflow_input/bsn_inner_eth_src
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 /*
  * Inner ethernet source MAC
diff --git a/openflow_input/bsn_inner_vlan_vid b/openflow_input/bsn_inner_vlan_vid
index 68092a2..702f3e9 100644
--- a/openflow_input/bsn_inner_vlan_vid
+++ b/openflow_input/bsn_inner_vlan_vid
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 /*
  * Inner VLAN VID
diff --git a/openflow_input/bsn_internal_priority b/openflow_input/bsn_internal_priority
index 55d903d..6482992 100644
--- a/openflow_input/bsn_internal_priority
+++ b/openflow_input/bsn_internal_priority
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_internal_priority : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_ip_fragmentation b/openflow_input/bsn_ip_fragmentation
new file mode 100644
index 0000000..b64cb4d
--- /dev/null
+++ b/openflow_input/bsn_ip_fragmentation
@@ -0,0 +1,50 @@
+// Copyright 2016, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License,
+// version 1.0 (EPL), with the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may
+// distribute libraries generated by LoxiGen (LoxiGen Libraries)
+// under the terms of your choice, provided that copyright and
+// licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i)
+// included in the LoxiGen Libraries, if distributed in source code
+// form and (ii) included in any documentation for the LoxiGen
+// Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2013, Big Switch Networks, Inc.
+// This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or
+// LOXI Exception. You may obtain a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an "AS
+// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+// express or implied. See the EPL for the specific language
+// governing permissions and limitations under the EPL.
+
+#version 3
+#version 4
+#version 5
+#version 6
+
+/*
+ * IP fragmentation
+ */
+
+struct of_oxm_bsn_ip_fragmentation : of_oxm {
+    uint32_t type_len == 0x00033401;
+    uint8_t value;
+};
+
+struct of_oxm_bsn_ip_fragmentation_masked : of_oxm {
+    uint32_t type_len == 0x00033502;
+    uint8_t value;
+    uint8_t value_mask;
+};
+
diff --git a/openflow_input/bsn_l2_cache_hit b/openflow_input/bsn_l2_cache_hit
index 694bc65..c178611 100644
--- a/openflow_input/bsn_l2_cache_hit
+++ b/openflow_input/bsn_l2_cache_hit
@@ -30,6 +30,8 @@
 
 #version 3
 #version 4
+#version 5
+#version 6
 
 /*
  * L2 Cache Hit
diff --git a/openflow_input/bsn_l3_interface_class_id b/openflow_input/bsn_l3_interface_class_id
index f16d333..cfd17ef 100644
--- a/openflow_input/bsn_l3_interface_class_id
+++ b/openflow_input/bsn_l3_interface_class_id
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * L3 interface class ID for SwitchLight
diff --git a/openflow_input/bsn_l3_src_class_id b/openflow_input/bsn_l3_src_class_id
index 7e2569e..586ba38 100644
--- a/openflow_input/bsn_l3_src_class_id
+++ b/openflow_input/bsn_l3_src_class_id
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * L3 source class ID for SwitchLight
diff --git a/openflow_input/bsn_lacp b/openflow_input/bsn_lacp
index ed36b0d..201848c 100644
--- a/openflow_input/bsn_lacp
+++ b/openflow_input/bsn_lacp
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 // LACP Convergence Status set in of_bsn_lacp_convergence_notif message
 enum of_bsn_lacp_convergence_status(wire_type=uint8_t, complete=False) {
diff --git a/openflow_input/bsn_lag_id b/openflow_input/bsn_lag_id
index d428933..f9f25a2 100644
--- a/openflow_input/bsn_lag_id
+++ b/openflow_input/bsn_lag_id
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * Ingress LAG ID for SwitchLight
diff --git a/openflow_input/bsn_log b/openflow_input/bsn_log
index e636d6e..9c364ff 100644
--- a/openflow_input/bsn_log
+++ b/openflow_input/bsn_log
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 enum ofp_bsn_loglevel(wire_type=uint8_t) {
     OFP_BSN_LOGLEVEL_MSG = 0,
diff --git a/openflow_input/bsn_lua b/openflow_input/bsn_lua
index d941666..c89edfd 100644
--- a/openflow_input/bsn_lua
+++ b/openflow_input/bsn_lua
@@ -39,6 +39,7 @@
 
 #version 4
 #version 5
+#version 6
 
 // Upload chunks of Lua code to the switch
 //
diff --git a/openflow_input/bsn_ndp_offload b/openflow_input/bsn_ndp_offload
new file mode 100644
index 0000000..b4323d1
--- /dev/null
+++ b/openflow_input/bsn_ndp_offload
@@ -0,0 +1,42 @@
+// Copyright 2016, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
+// the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may distribute libraries
+// generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
+// that copyright and licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i) included in
+// the LoxiGen Libraries, if distributed in source code form and (ii) included in any
+// documentation for the LoxiGen Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
+// a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// EPL for the specific language governing permissions and limitations
+// under the EPL.
+//
+// Also derived from the OpenFlow header files which have these copyrights:
+// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+// Copyright (c) 2011, 2012 Open Networking Foundation
+
+#version 4
+#version 5
+#version 6
+
+struct of_instruction_bsn_ndp_offload : of_instruction_bsn {
+    uint16_t type == 65535;
+    uint16_t len;
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t subtype == 14;
+    pad(4);
+};
diff --git a/openflow_input/bsn_packet_of_death b/openflow_input/bsn_packet_of_death
index c1ac28d..18d8c78 100644
--- a/openflow_input/bsn_packet_of_death
+++ b/openflow_input/bsn_packet_of_death
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_packet_of_death : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_pktin_flag b/openflow_input/bsn_pktin_flag
index b21616a..7acfa4b 100644
--- a/openflow_input/bsn_pktin_flag
+++ b/openflow_input/bsn_pktin_flag
@@ -1,4 +1,4 @@
-// Copyright 2014, Big Switch Networks, Inc.
+// Copyright 2014-2016, Big Switch Networks, Inc.
 //
 // LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
 // the following special exception:
@@ -12,7 +12,7 @@
 // the LoxiGen Libraries, if distributed in source code form and (ii) included in any
 // documentation for the LoxiGen Libraries, if distributed in binary form.
 //
-// Notice: "Copyright 2014, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
+// Notice: "Copyright 2014-2016, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
 //
 // You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
 // a copy of the EPL at:
@@ -27,6 +27,7 @@
 
 #version 4
 #version 5
+#version 6
 
 // In a realistic switch pipeline there are multiple reasons a given packet
 // should be sent to the controller. The packet-in reason field is only 8 bits,
@@ -47,4 +48,11 @@
     OFP_BSN_PKTIN_FLAG_SFLOW = 0x800,
     OFP_BSN_PKTIN_FLAG_ARP_CACHE = 0x1000,
     OFP_BSN_PKTIN_FLAG_ARP_TARGET = 0x2000,
+    OFP_BSN_PKTIN_FLAG_IGMP = 0x4000,
+    OFP_BSN_PKTIN_FLAG_PIM = 0x8000,
+    OFP_BSN_PKTIN_FLAG_VXLAN_SIP_MISS = 0x10000,
+    OFP_BSN_PKTIN_FLAG_MC_RESERVED = 0x20000,
+    OFP_BSN_PKTIN_FLAG_ANALYTICS = 0x40000,
+    OFP_BSN_PKTIN_FLAG_ICMPV6 = 0x80000,
+    OFP_BSN_PKTIN_FLAG_INGRESS_ACL_LOCAL = 0x100000,
 };
diff --git a/openflow_input/bsn_port_counter b/openflow_input/bsn_port_counter
index 51a36f8..88f60d3 100644
--- a/openflow_input/bsn_port_counter
+++ b/openflow_input/bsn_port_counter
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 enum ofp_bsn_port_counter(wire_type=uint8_t, complete=False, stable=True) {
   OFP_BSN_PORT_COUNTER_RX_BYTES = 0,
@@ -60,6 +61,34 @@
   OFP_BSN_PORT_COUNTER_RX_OVERFLOW_ERRORS = 25,
   OFP_BSN_PORT_COUNTER_TX_CARRIER_ERRORS = 26,
   OFP_BSN_PORT_COUNTER_RX_PACKETS_BAD_VLAN = 27,
+  OFP_BSN_PORT_COUNTER_LINK_UP = 28,
+  OFP_BSN_PORT_COUNTER_LINK_DOWN = 29,
+  OFP_BSN_PORT_COUNTER_RX_PFC_CONTROL_FRAME = 30,
+  OFP_BSN_PORT_COUNTER_TX_PFC_CONTROL_FRAME = 31,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_0 = 32,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_1 = 33,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_2 = 34,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_3 = 35,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_4 = 36,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_5 = 37,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_6 = 38,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_7 = 39,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_0 = 40,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_1 = 41,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_2 = 42,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_3 = 43,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_4 = 44,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_5 = 45,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_6 = 46,
+  OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_7 = 47,
+  OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_0 = 48,
+  OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_1 = 49,
+  OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_2 = 50,
+  OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_3 = 51,
+  OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_4 = 52,
+  OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_5 = 53,
+  OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_6 = 54,
+  OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_7 = 55,
 };
 
 struct of_bsn_port_counter_stats_request : of_bsn_stats_request {
diff --git a/openflow_input/bsn_port_generation_id b/openflow_input/bsn_port_generation_id
index fddf9a3..3b42411 100644
--- a/openflow_input/bsn_port_generation_id
+++ b/openflow_input/bsn_port_generation_id
@@ -28,6 +28,7 @@
 // This generation ID is changed whenever a port goes link-down.
 
 #version 5
+#version 6
 
 struct of_port_desc_prop_bsn_generation_id : of_port_desc_prop_bsn {
     uint16_t type == 0xffff;
diff --git a/openflow_input/bsn_prioritize_pdus b/openflow_input/bsn_prioritize_pdus
index 7a179a9..2afb70a 100644
--- a/openflow_input/bsn_prioritize_pdus
+++ b/openflow_input/bsn_prioritize_pdus
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_prioritize_pdus : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_queue_name b/openflow_input/bsn_queue_name
new file mode 100644
index 0000000..ae3fbbb
--- /dev/null
+++ b/openflow_input/bsn_queue_name
@@ -0,0 +1,37 @@
+// Copyright 2016, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
+// the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may distribute libraries
+// generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
+// that copyright and licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i) included in
+// the LoxiGen Libraries, if distributed in source code form and (ii) included in any
+// documentation for the LoxiGen Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
+// a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// EPL for the specific language governing permissions and limitations
+// under the EPL.
+
+#version 5
+#version 6
+
+struct of_queue_desc_prop_bsn_queue_name : of_queue_desc_prop_bsn {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t exp_type == 0;
+    of_octets_t name; /* UTF-8 encoded. Not null terminated. */
+};
diff --git a/openflow_input/bsn_require_vlan_xlate b/openflow_input/bsn_require_vlan_xlate
index 32fc55c..dc0b56e 100644
--- a/openflow_input/bsn_require_vlan_xlate
+++ b/openflow_input/bsn_require_vlan_xlate
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_require_vlan_xlate : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_span_destination b/openflow_input/bsn_span_destination
index fd4f677..f4439bb 100644
--- a/openflow_input/bsn_span_destination
+++ b/openflow_input/bsn_span_destination
@@ -31,6 +31,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_instruction_bsn_span_destination : of_instruction_bsn {
     uint16_t type == 65535;
diff --git a/openflow_input/bsn_switch_pipeline b/openflow_input/bsn_switch_pipeline
index d42532b..f910d5a 100644
--- a/openflow_input/bsn_switch_pipeline
+++ b/openflow_input/bsn_switch_pipeline
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_bsn_get_switch_pipeline_request : of_bsn_header {
     uint8_t version;
diff --git a/openflow_input/bsn_takeover b/openflow_input/bsn_takeover
index 1b95611..b69721b 100644
--- a/openflow_input/bsn_takeover
+++ b/openflow_input/bsn_takeover
@@ -29,6 +29,7 @@
 // governing permissions and limitations under the EPL.
 
 #version 5
+#version 6
 
 // This message is used by IVS for hitless restart.
 
diff --git a/openflow_input/bsn_tcp_flags b/openflow_input/bsn_tcp_flags
index 1a84a90..06965ef 100644
--- a/openflow_input/bsn_tcp_flags
+++ b/openflow_input/bsn_tcp_flags
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * TCP flags
diff --git a/openflow_input/bsn_time b/openflow_input/bsn_time
index d69e538..bb59966 100644
--- a/openflow_input/bsn_time
+++ b/openflow_input/bsn_time
@@ -34,6 +34,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_bsn_time_request : of_bsn_header {
     uint8_t version;
diff --git a/openflow_input/bsn_tlv b/openflow_input/bsn_tlv
index 0985e1c..84f9158 100644
--- a/openflow_input/bsn_tlv
+++ b/openflow_input/bsn_tlv
@@ -1,4 +1,4 @@
-// Copyright 2013, Big Switch Networks, Inc.
+// Copyright 2013-2017, Big Switch Networks, Inc.
 //
 // LoxiGen is licensed under the Eclipse Public License,
 // version 1.0 (EPL), with the following special exception:
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_bsn_tlv_port : of_bsn_tlv {
     uint16_t type == 0;
@@ -550,5 +551,528 @@
 struct of_bsn_tlv_ipv6 : of_bsn_tlv {
     uint16_t type == 84;
     uint16_t length;
-    of_ipv6_t value; 
+    of_ipv6_t value;
+};
+
+enum ofp_bsn_decap(wire_type=uint16_t) {
+    OFP_BSN_DECAP_VXLAN = 0,
+    OFP_BSN_DECAP_ERSPAN = 1,
+    OFP_BSN_DECAP_L2_GRE = 2,
+    OFP_BSN_DECAP_NVGRE = 3,
+    OFP_BSN_DECAP_CAPWAP = 4,
+    OFP_BSN_DECAP_L2_MPLS = 5,
+    OFP_BSN_DECAP_L3_GRE = 6,
+    OFP_BSN_DECAP_GTP = 7,
+    OFP_BSN_DECAP_L3_MPLS = 8,
+};
+
+struct of_bsn_tlv_decap : of_bsn_tlv {
+    uint16_t type == 85;
+    uint16_t length;
+    enum ofp_bsn_decap value;
+};
+
+struct of_bsn_tlv_vni : of_bsn_tlv {
+    uint16_t type == 86;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_mcg_type_vxlan : of_bsn_tlv {
+    uint16_t type == 87;
+    uint16_t length;
+};
+
+enum ofp_bsn_port_vxlan_mode(wire_type=uint8_t) {
+    OFP_BSN_PORT_VXLAN_RECIRCULATION_ENABLE = 0,
+    OFP_BSN_PORT_VXLAN_TERMINATION_ENABLE = 1,
+};
+
+struct of_bsn_tlv_port_vxlan_mode : of_bsn_tlv {
+    uint16_t type == 88;
+    uint16_t length;
+    enum ofp_bsn_port_vxlan_mode value;
+};
+
+enum ofp_bsn_rate_unit(wire_type=uint8_t) {
+    OFP_BSN_RATE_UNIT_PPS = 0, /* Packets per second */
+    OFP_BSN_RATE_UNIT_KBITPS = 1, /* Kilobits per second */
+};
+
+struct of_bsn_tlv_rate_unit : of_bsn_tlv {
+    uint16_t type == 89;
+    uint16_t length;
+    enum ofp_bsn_rate_unit value;
+};
+
+struct of_bsn_tlv_broadcast_rate : of_bsn_tlv {
+    uint16_t type == 90;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_known_multicast_rate : of_bsn_tlv {
+    uint16_t type == 91;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_unknown_multicast_rate : of_bsn_tlv {
+    uint16_t type == 92;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_unicast_rate : of_bsn_tlv {
+    uint16_t type == 93;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_nexthop_type_vxlan : of_bsn_tlv {
+    uint16_t type == 94;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_multicast_interface_id : of_bsn_tlv {
+    uint16_t type == 95;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_use_packet_state : of_bsn_tlv {
+    uint16_t type == 96;
+    uint16_t length;
+    uint8_t value;
+};
+
+enum ofp_bsn_status(wire_type=uint8_t) {
+    OFP_BSN_STATUS_DISABLE = 0,
+    OFP_BSN_STATUS_ENABLE = 1,
+};
+
+struct of_bsn_tlv_status: of_bsn_tlv {
+    uint16_t type == 97;
+    uint16_t length;
+    enum ofp_bsn_status value;
+};
+
+struct of_bsn_vlan_mac {
+    uint16_t vlan_vid;
+    of_mac_addr_t mac;
+};
+
+struct of_bsn_tlv_vlan_mac_list : of_bsn_tlv {
+    uint16_t type == 98;
+    uint16_t length;
+    list(of_bsn_vlan_mac_t) key;
+};
+
+struct of_bsn_tlv_vfi : of_bsn_tlv {
+    uint16_t type == 99;
+    uint16_t length;
+    uint16_t value;
+};
+
+struct of_bsn_tlv_hash_seed : of_bsn_tlv {
+    uint16_t type == 100;
+    uint16_t length;
+    uint32_t seed1;
+    uint32_t seed2;
+};
+
+enum of_bsn_hash_type(wire_type=uint8_t) {
+    OFP_BSN_HASH_TYPE_L2 = 0,
+    OFP_BSN_HASH_TYPE_L3 = 1,
+    OFP_BSN_HASH_TYPE_ENHANCED = 2,
+};
+
+struct of_bsn_tlv_hash_type : of_bsn_tlv {
+    uint16_t type == 101;
+    uint16_t length;
+    enum of_bsn_hash_type value;
+};
+
+enum of_bsn_hash_packet_type(wire_type=uint8_t) {
+    OF_BSN_HASH_PACKET_L2 = 0,
+    OF_BSN_HASH_PACKET_L2GRE = 1,
+    OF_BSN_HASH_PACKET_IPV4 = 3,
+    OF_BSN_HASH_PACKET_IPV6 = 4,
+    OF_BSN_HASH_PACKET_MPLS = 5,
+    OF_BSN_HASH_PACKET_SYMMETRIC = 6,
+};
+
+struct of_bsn_tlv_hash_packet_type : of_bsn_tlv {
+    uint16_t type == 102;
+    uint16_t length;
+    enum of_bsn_hash_packet_type value;
+};
+
+enum of_bsn_hash_packet_field(wire_type=uint64_t, bitmask=True) {
+    // 0x1 is unused
+    OFP_BSN_HASH_FIELD_DST_MAC =     0x2,
+    OFP_BSN_HASH_FIELD_SRC_MAC =     0x4,
+    OFP_BSN_HASH_FIELD_ETH_TYPE =    0x8,
+    OFP_BSN_HASH_FIELD_VLAN_ID =     0x10,
+    OFP_BSN_HASH_FIELD_INNER_L2 =    0x20,
+    OFP_BSN_HASH_FIELD_INNER_L3 =    0x40,
+    OFP_BSN_HASH_FIELD_SRC_IP =      0x80,
+    OFP_BSN_HASH_FIELD_DST_IP =      0x100,
+    OFP_BSN_HASH_FIELD_IP_PROTO =    0x200,
+    OFP_BSN_HASH_FIELD_SRC_L4_PORT = 0x400,
+    OFP_BSN_HASH_FIELD_DST_L4_PORT = 0x800,
+    OFP_BSN_HASH_FIELD_MPLS_LABEL1 = 0x1000,
+    OFP_BSN_HASH_FIELD_MPLS_LABEL2 = 0x2000,
+    OFP_BSN_HASH_FIELD_MPLS_LABEL3 = 0x4000,
+    OFP_BSN_HASH_FIELD_MPLS_LABEL_HI_BITS  = 0x8000,
+    OFP_BSN_HASH_FIELD_MPLS_PAYLOAD_SRC_IP = 0x10000,
+    OFP_BSN_HASH_FIELD_MPLS_PAYLOAD_DST_IP = 0x20000,
+    OFP_BSN_HASH_FIELD_SYMMETRIC =           0x40000,
+};
+
+struct of_bsn_tlv_hash_packet_field : of_bsn_tlv {
+    uint16_t type == 103;
+    uint16_t length;
+    enum of_bsn_hash_packet_field value;
+};
+
+struct of_bsn_tlv_hash_gtp_header_match : of_bsn_tlv {
+    uint16_t type == 104;
+    uint16_t length;
+    uint8_t first_header_byte;
+    uint8_t first_header_mask;
+};
+
+enum of_bsn_hash_gtp_port_match(wire_type=uint8_t) {
+    OF_BSN_HASH_GTP_PORT_MATCH_SRC = 1,
+    OF_BSN_HASH_GTP_PORT_MATCH_DST = 2,
+    OF_BSN_HASH_GTP_PORT_MATCH_SRC_OR_DST = 3,
+    OF_BSN_HASH_GTP_PORT_MATCH_SRC_AND_DST = 4,
+};
+
+struct of_bsn_tlv_hash_gtp_port_match : of_bsn_tlv {
+    uint16_t type == 105;
+    uint16_t length;
+    enum of_bsn_hash_gtp_port_match match;
+    uint16_t src_port;
+    uint16_t dst_port;
+};
+
+struct of_bsn_tlv_untagged : of_bsn_tlv {
+    uint16_t type == 106;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_vfp_class_id : of_bsn_tlv {
+    uint16_t type == 107;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_qos_priority : of_bsn_tlv {
+    uint16_t type == 108;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_parent_port : of_bsn_tlv {
+    uint16_t type == 109;
+    uint16_t length;
+    of_port_no_t value;
+};
+
+struct of_bsn_tlv_loopback_port : of_bsn_tlv {
+    uint16_t type == 110;
+    uint16_t length;
+    of_port_no_t value;
+};
+
+struct of_bsn_tlv_vpn_key : of_bsn_tlv {
+    uint16_t type == 111;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_dscp : of_bsn_tlv {
+    uint16_t type == 112;
+    uint16_t length;
+    uint16_t value;  // 0-63
+};
+
+struct of_bsn_tlv_ttl : of_bsn_tlv {
+    uint16_t type == 113;
+    uint16_t length;
+    uint16_t value;
+};
+
+struct of_bsn_tlv_next_hop_mac : of_bsn_tlv {
+    uint16_t type == 114;
+    uint16_t length;
+    of_mac_addr_t value;
+};
+
+struct of_bsn_tlv_next_hop_ipv4 : of_bsn_tlv {
+    uint16_t type == 115;
+    uint16_t length;
+    of_ipv4_t value;
+};
+
+struct of_bsn_tlv_rate_limit : of_bsn_tlv {
+    uint16_t type == 116;
+    uint16_t length;
+    uint32_t value;  // in Kbps
+};
+
+struct of_bsn_tlv_vxlan_egress_lag : of_bsn_tlv {
+    uint16_t type == 117;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_cpu_lag : of_bsn_tlv {
+    uint16_t type == 118;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_uint64_list : of_bsn_tlv {
+    uint16_t type == 119;
+    uint16_t length;
+    list(of_uint64_t) value;
+};
+
+struct of_bsn_tlv_disable_src_mac_check : of_bsn_tlv {
+    uint16_t type == 120;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_drop : of_bsn_tlv {
+    uint16_t type == 121;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_ipv6_prefix : of_bsn_tlv {
+    uint16_t type == 122;
+    uint16_t length;
+    of_ipv6_t value;
+    uint8_t prefix_length;
+};
+
+struct of_bsn_tlv_ndp_offload : of_bsn_tlv {
+    uint16_t type == 123;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_ndp_static : of_bsn_tlv {
+    uint16_t type == 124;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_icmpv6_chksum : of_bsn_tlv {
+    uint16_t type == 125;
+    uint16_t length;
+    uint16_t value;
+};
+
+struct of_bsn_tlv_ipv6_src : of_bsn_tlv {
+    uint16_t type == 126;
+    uint16_t length;
+    of_ipv6_t value;
+};
+
+struct of_bsn_tlv_ipv6_dst : of_bsn_tlv {
+    uint16_t type == 127;
+    uint16_t length;
+    of_ipv6_t value;
+};
+
+struct of_bsn_tlv_push_vlan_on_ingress : of_bsn_tlv {
+    uint16_t type == 128;
+    uint16_t length;
+};
+
+// apply_packets and apply_bytes are stat counters, like rx_packet
+// identifies packets and bytes applied to some action, for example:
+// packets with inet L3/L4 headers for netflow
+
+struct of_bsn_tlv_apply_packets : of_bsn_tlv {
+    uint16_t type == 129;
+    uint16_t length;
+    uint64_t value;
+};
+
+struct of_bsn_tlv_apply_bytes : of_bsn_tlv {
+    uint16_t type == 130;
+    uint16_t length;
+    uint64_t value;
+};
+
+struct of_bsn_tlv_eth_type : of_bsn_tlv {
+    uint16_t type == 131;
+    uint16_t length;
+    uint16_t value;
+};
+
+struct of_bsn_tlv_ecn : of_bsn_tlv {
+    uint16_t type == 132;
+    uint16_t length;
+    uint8_t value;
+};
+
+struct of_bsn_tlv_tcp_flags : of_bsn_tlv {
+    uint16_t type == 133;
+    uint16_t length;
+    uint16_t value;
+};
+
+struct of_bsn_tlv_l3_interface_class_id : of_bsn_tlv {
+    uint16_t type == 134;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_l3_src_class_id : of_bsn_tlv {
+    uint16_t type == 135;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_l3_dst_class_id : of_bsn_tlv {
+    uint16_t type == 136;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_egress_only : of_bsn_tlv {
+    uint16_t type == 137;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_ingress_port_group_id : of_bsn_tlv {
+    uint16_t type == 138;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_egress_port_group_id : of_bsn_tlv {
+    uint16_t type == 139;
+    uint16_t length;
+    uint32_t value;
+};
+
+struct of_bsn_tlv_data_mask : of_bsn_tlv {
+    uint16_t type == 140;
+    uint16_t length;
+    of_octets_t value;
+};
+
+enum ofp_bsn_port_usage(wire_type=uint16_t) {
+    OFP_BSN_PORT_UNUSED = 0,
+    OFP_BSN_PORT_TRANSMIT_ONLY = 1,
+    OFP_BSN_PORT_RECEIVE_ONLY = 2,
+    OFP_BSN_PORT_BIDIRECTION = 3,
+};
+
+struct of_bsn_tlv_port_usage : of_bsn_tlv {
+    uint16_t type == 141;
+    uint16_t length;
+    enum ofp_bsn_port_usage value;
+};
+
+enum ofp_bsn_tunnel_type(wire_type=uint64_t, bitmask=True) {
+    OFP_BSN_TUNNEL_L2GRE = 0x1,
+};
+
+struct of_bsn_tlv_tunnel_capability : of_bsn_tlv {
+    uint16_t type == 142;
+    uint16_t length;
+    enum ofp_bsn_tunnel_type value;
+};
+
+enum ofp_bsn_enhanced_hash_type(wire_type=uint64_t, bitmask=True) {
+    OFP_BSN_ENHANCED_HASH_L2 = 0x1,
+    OFP_BSN_ENHANCED_HASH_L3 = 0x2,
+    OFP_BSN_ENHANCED_HASH_L2GRE = 0x4,
+    OFP_BSN_ENHANCED_HASH_MPLS = 0x8,
+    OFP_BSN_ENHANCED_HASH_GTP = 0x10,
+    OFP_BSN_ENHANCED_HASH_SYMMETRIC = 0x20,
+};
+
+struct of_bsn_tlv_enhanced_hash_capability : of_bsn_tlv {
+    uint16_t type == 143;
+    uint16_t length;
+    enum ofp_bsn_enhanced_hash_type value;
+};
+
+enum ofp_bsn_auto_negotiation_type(wire_type=uint8_t) {
+    OFP_BSN_AUTO_NEGOTIATION_DEFAULT = 0,
+    OFP_BSN_AUTO_NEGOTIATION_ENABLE = 1,
+    OFP_BSN_AUTO_NEGOTIATION_DISABLE = 2,
+};
+
+struct of_bsn_tlv_auto_negotiation : of_bsn_tlv {
+    uint16_t type == 144;
+    uint16_t length;
+    enum ofp_bsn_auto_negotiation_type value;
+};
+
+enum ofp_bsn_hash_algorithm_type(wire_type=uint16_t) {
+    OFP_BSN_HASH_ALGORITHM_CRC16XOR8 = 0,
+    OFP_BSN_HASH_ALGORITHM_CRC16XOR4 = 1,
+    OFP_BSN_HASH_ALGORITHM_CRC16XOR2 = 2,
+    OFP_BSN_HASH_ALGORITHM_CRC16XOR1 = 3,
+    OFP_BSN_HASH_ALGORITHM_CRC16 = 4,
+    OFP_BSN_HASH_ALGORITHM_XOR16 = 5,
+    OFP_BSN_HASH_ALGORITHM_CRC16CCITT = 6,
+    OFP_BSN_HASH_ALGORITHM_CRC32LO = 7,
+    OFP_BSN_HASH_ALGORITHM_CRC32HI = 8,
+};
+
+struct of_bsn_tlv_hash_algorithm : of_bsn_tlv {
+    uint16_t type == 145;
+    uint16_t length;
+    enum ofp_bsn_hash_algorithm_type value;
+};
+
+enum ofp_bsn_loopback_mode(wire_type=uint8_t) {
+    OFP_BSN_LOOPBACK_MODE_NONE = 0,
+    OFP_BSN_LOOPBACK_MODE_MAC = 1,
+    OFP_BSN_LOOPBACK_MODE_PHY = 2,
+    OFP_BSN_LOOPBACK_MODE_PHY_REMOTE = 3,
+};
+
+struct of_bsn_tlv_loopback_mode : of_bsn_tlv {
+    uint16_t type == 146;
+    uint16_t length;
+    enum ofp_bsn_loopback_mode value;
+};
+
+struct of_bsn_tlv_no_arp_response : of_bsn_tlv {
+    uint16_t type == 147;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_no_ns_response : of_bsn_tlv {
+    uint16_t type == 148;
+    uint16_t length;
+};
+
+enum ofp_bsn_forward_error_correction_type(wire_type=uint8_t) {
+    OFP_BSN_FORWARD_ERROR_CORRECTION_DEFAULT = 0,
+    OFP_BSN_FORWARD_ERROR_CORRECTION_ENABLE = 1,
+    OFP_BSN_FORWARD_ERROR_CORRECTION_DISABLE = 2,
+};
+
+struct of_bsn_tlv_forward_error_correction : of_bsn_tlv {
+    uint16_t type == 149;
+    uint16_t length;
+    enum ofp_bsn_forward_error_correction_type value;
+};
+
+struct of_bsn_tlv_optics_always_enabled : of_bsn_tlv {
+    uint16_t type == 150;
+    uint16_t length;
+};
+
+struct of_bsn_tlv_force_link_up : of_bsn_tlv {
+    uint16_t type == 151;
+    uint16_t length;
 };
diff --git a/openflow_input/bsn_udf b/openflow_input/bsn_udf
index 12ad1cb..5fae674 100644
--- a/openflow_input/bsn_udf
+++ b/openflow_input/bsn_udf
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * User Defined Fields
diff --git a/openflow_input/bsn_uplink b/openflow_input/bsn_uplink
index dec2ed4..820112c 100644
--- a/openflow_input/bsn_uplink
+++ b/openflow_input/bsn_uplink
@@ -26,6 +26,7 @@
 // under the EPL.
 
 #version 5
+#version 6
 
 struct of_port_desc_prop_bsn_uplink : of_port_desc_prop_bsn {
     uint16_t type == 0xffff;
diff --git a/openflow_input/bsn_vfi b/openflow_input/bsn_vfi
new file mode 100644
index 0000000..76602b0
--- /dev/null
+++ b/openflow_input/bsn_vfi
@@ -0,0 +1,48 @@
+// Copyright 2016, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License,
+// version 1.0 (EPL), with the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may
+// distribute libraries generated by LoxiGen (LoxiGen Libraries)
+// under the terms of your choice, provided that copyright and
+// licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i)
+// included in the LoxiGen Libraries, if distributed in source code
+// form and (ii) included in any documentation for the LoxiGen
+// Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2013, Big Switch Networks, Inc.
+// This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or
+// LOXI Exception. You may obtain a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an "AS
+// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+// express or implied. See the EPL for the specific language
+// governing permissions and limitations under the EPL.
+
+#version 4
+#version 5
+#version 6
+
+/*
+ * VXLAN VFI INDEX
+ */
+
+struct of_oxm_bsn_vfi : of_oxm {
+    uint32_t type_len == 0x00033202;
+    uint16_t value;
+};
+
+struct of_oxm_bsn_vfi_masked : of_oxm {
+    uint32_t type_len == 0x00033304;
+    uint16_t value;
+    uint16_t value_mask;
+};
diff --git a/openflow_input/bsn_vlan_counter b/openflow_input/bsn_vlan_counter
index d39d35f..d020459 100644
--- a/openflow_input/bsn_vlan_counter
+++ b/openflow_input/bsn_vlan_counter
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 enum ofp_bsn_vlan_counter_constants {
     OFP_BSN_VLAN_ALL = 0xffff,
@@ -74,3 +75,13 @@
     uint32_t subtype == 9;
     list(of_bsn_vlan_counter_stats_entry_t) entries;
 };
+
+struct of_bsn_vlan_counter_clear : of_bsn_header {
+    uint8_t version;
+    uint8_t type == 4;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t experimenter == 0x5c16c7;
+    uint32_t subtype == 70;
+    uint16_t vlan_vid;
+};
diff --git a/openflow_input/bsn_vlan_xlate_port_group_id b/openflow_input/bsn_vlan_xlate_port_group_id
index 986dc0e..e575679 100644
--- a/openflow_input/bsn_vlan_xlate_port_group_id
+++ b/openflow_input/bsn_vlan_xlate_port_group_id
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * VLAN xlate port group ID for SwitchLight
diff --git a/openflow_input/bsn_vrf b/openflow_input/bsn_vrf
index c61c313..a598df5 100644
--- a/openflow_input/bsn_vrf
+++ b/openflow_input/bsn_vrf
@@ -31,6 +31,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 /*
  * Virtual Routing/Forwarding ID for SwitchLight
diff --git a/openflow_input/bsn_vrf_counter b/openflow_input/bsn_vrf_counter
index 012d728..3106682 100644
--- a/openflow_input/bsn_vrf_counter
+++ b/openflow_input/bsn_vrf_counter
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 enum ofp_bsn_vrf_counter_constants(wire_type=uint32_t) {
     OFP_BSN_VRF_ALL = 0xffffffff,
diff --git a/openflow_input/bsn_vxlan b/openflow_input/bsn_vxlan
index 4171a51..466f450 100644
--- a/openflow_input/bsn_vxlan
+++ b/openflow_input/bsn_vxlan
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 /*
  * VXLAN Virtual Network Identifier
diff --git a/openflow_input/intel b/openflow_input/intel
new file mode 100644
index 0000000..a66d5a0
--- /dev/null
+++ b/openflow_input/intel
@@ -0,0 +1,64 @@
+// Copyright 2017, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License,
+// version 1.0 (EPL), with the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may
+// distribute libraries generated by LoxiGen (LoxiGen Libraries)
+// under the terms of your choice, provided that copyright and
+// licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i)
+// included in the LoxiGen Libraries, if distributed in source code
+// form and (ii) included in any documentation for the LoxiGen
+// Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2017, Big Switch Networks, Inc.
+// This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or
+// LOXI Exception. You may obtain a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an "AS
+// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+// express or implied. See the EPL for the specific language
+// governing permissions and limitations under the EPL.
+
+#version 5
+#version 6
+
+struct of_port_stats_prop_experimenter_intel : of_port_stats_prop_experimenter {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == 0x0000aa01;
+    uint32_t exp_type == 0x00000001;
+    pad(4);
+    
+    uint64_t rx_1_to_64_packets;
+    uint64_t rx_65_to_127_packets;
+    uint64_t rx_128_to_255_packets;
+    uint64_t rx_256_to_511_packets;
+    uint64_t rx_512_to_1023_packets;
+    uint64_t rx_1024_to_1522_packets;
+    uint64_t rx_1523_to_max_packets;
+             
+    uint64_t tx_1_to_64_packets;
+    uint64_t tx_65_to_127_packets;
+    uint64_t tx_128_to_255_packets;
+    uint64_t tx_256_to_511_packets;
+    uint64_t tx_512_to_1023_packets;
+    uint64_t tx_1024_to_1522_packets;
+    uint64_t tx_1523_to_max_packets;
+             
+    uint64_t tx_multicast_packets;
+    uint64_t rx_broadcast_packets;
+    uint64_t tx_broadcast_packets;
+    uint64_t rx_undersized_errors;
+    uint64_t rx_oversize_errors;
+    uint64_t rx_fragmented_errors;
+    uint64_t rx_jabber_errors;
+};
\ No newline at end of file
diff --git a/openflow_input/ovs_tcp_flags b/openflow_input/ovs_tcp_flags
new file mode 100644
index 0000000..22c3737
--- /dev/null
+++ b/openflow_input/ovs_tcp_flags
@@ -0,0 +1,64 @@
+// Copyright 2014, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License,
+// version 1.0 (EPL), with the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may
+// distribute libraries generated by LoxiGen (LoxiGen Libraries)
+// under the terms of your choice, provided that copyright and
+// licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i)
+// included in the LoxiGen Libraries, if distributed in source code
+// form and (ii) included in any documentation for the LoxiGen
+// Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2013, Big Switch Networks, Inc.
+// This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or
+// LOXI Exception. You may obtain a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an "AS
+// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+// express or implied. See the EPL for the specific language
+// governing permissions and limitations under the EPL.
+
+#version 3
+#version 4
+#version 5
+#version 6
+
+/*
+ *Experimenter TCP flags
+ *Author: fangtuo90@gmail.com
+ */
+
+enum ofp_ovs_tcp_flag(wire_type=uint16_t, bitmask=True) {
+    OFP_OVS_TCP_FLAG_FIN = 0x001,
+    OFP_OVS_TCP_FLAG_SYN = 0x002,
+    OFP_OVS_TCP_FLAG_RST = 0x004,
+    OFP_OVS_TCP_FLAG_PSH = 0x008,
+    OFP_OVS_TCP_FLAG_ACK = 0x010,
+    OFP_OVS_TCP_FLAG_URG = 0x020,
+    OFP_OVS_TCP_FLAG_ECE = 0x040,
+    OFP_OVS_TCP_FLAG_CWR = 0x080,
+    OFP_OVS_TCP_FLAG_NS  = 0x100,
+};
+
+struct of_oxm_ovs_tcp_flags : of_oxm {
+    uint32_t type_len == 0xffff5406;
+    uint32_t experimenter_id == 0x4f4e4600;
+    uint16_t value;
+};
+
+struct of_oxm_ovs_tcp_flags_masked : of_oxm {
+    uint32_t type_len == 0xffff5508;
+    uint32_t experimenter_id == 0x4f4e4600;
+    uint16_t value;
+    uint16_t value_mask;
+};
diff --git a/openflow_input/oxm-1.2 b/openflow_input/oxm-1.2
index dd596bd..39c0fdd 100644
--- a/openflow_input/oxm-1.2
+++ b/openflow_input/oxm-1.2
@@ -32,6 +32,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 struct of_oxm {
     uint32_t type_len == ?;
diff --git a/openflow_input/oxm-1.3 b/openflow_input/oxm-1.3
index 4bb55a1..200f3cd 100644
--- a/openflow_input/oxm-1.3
+++ b/openflow_input/oxm-1.3
@@ -30,6 +30,7 @@
 
 #version 4
 #version 5
+#version 6
 
 struct of_oxm_tunnel_id : of_oxm {
     uint32_t type_len == 0x80004c08;
diff --git a/openflow_input/oxm-1.4 b/openflow_input/oxm-1.4
index 0fd96ec..b165fc5 100644
--- a/openflow_input/oxm-1.4
+++ b/openflow_input/oxm-1.4
@@ -29,6 +29,7 @@
 // governing permissions and limitations under the EPL.
 
 #version 5
+#version 6
 
 struct of_oxm_pbb_uca : of_oxm {
     uint32_t type_len == 0x80005201;
diff --git a/openflow_input/oxm-1.5 b/openflow_input/oxm-1.5
new file mode 100644
index 0000000..f5d2e4c
--- /dev/null
+++ b/openflow_input/oxm-1.5
@@ -0,0 +1,35 @@
+#version 6
+
+struct of_oxm_tcp_flags : of_oxm {
+    uint32_t type_len == 0x80005402;
+    uint8_t value;
+};
+
+struct of_oxm_tcp_flags_masked : of_oxm {
+    uint32_t type_len == 0x80005504;
+    uint8_t value;
+    uint8_t value_mask;
+};
+
+struct of_oxm_actset_output : of_oxm {
+    uint32_t type_len == 0x80005604;
+    uint8_t value;
+};
+
+struct of_oxm_actset_output_masked : of_oxm {
+    uint32_t type_len == 0x80005708;
+    of_port_no_t value;
+    of_port_no_t value_mask;
+};
+
+
+struct of_oxm_packet_type : of_oxm {
+    uint32_t type_len == 0x80005804;
+    uint8_t value;
+};
+
+struct of_oxm_packet_type_masked : of_oxm {
+    uint32_t type_len == 0x80005908;
+    uint8_t value;
+    uint8_t value_mask;
+};
diff --git a/openflow_input/oxm_nicira_tun b/openflow_input/oxm_nicira_tun
index 9e73fec..ae2575f 100644
--- a/openflow_input/oxm_nicira_tun
+++ b/openflow_input/oxm_nicira_tun
@@ -28,6 +28,7 @@
 #version 3
 #version 4
 #version 5
+#version 6
 
 // Nicira extension for tun_ipv4_src (31)
 struct of_oxm_tunnel_ipv4_src : of_oxm {
diff --git a/openflow_input/oxs-1.5 b/openflow_input/oxs-1.5
new file mode 100644
index 0000000..9ef1642
--- /dev/null
+++ b/openflow_input/oxs-1.5
@@ -0,0 +1,31 @@
+
+#version 6
+
+struct of_oxs {
+    uint32_t type_len == ?;
+};
+
+struct of_oxs_duration : of_oxs {
+    uint32_t type_len == 0x80020008 ;
+    uint16_t value;
+};
+
+struct of_oxs_idle_time : of_oxs {
+    uint32_t type_len == 0x80020208 ;
+    uint16_t value;
+};
+
+struct of_oxs_flow_count : of_oxs {
+    uint32_t type_len == 0x80020404 ;
+    uint16_t value;
+};
+
+struct of_oxs_packet_count : of_oxs {
+    uint32_t type_len == 0x80020608 ;
+    uint16_t value;
+};
+
+struct of_oxs_byte_count : of_oxs {
+    uint32_t type_len == 0x80020808 ;
+    uint16_t value;
+};
diff --git a/openflow_input/standard-1.0 b/openflow_input/standard-1.0
index 1e4750b..1bba411 100644
--- a/openflow_input/standard-1.0
+++ b/openflow_input/standard-1.0
@@ -433,8 +433,8 @@
     uint32_t xid;
     of_port_no_t port_no;
     of_mac_addr_t hw_addr;
-    uint32_t config;
-    uint32_t mask;
+    enum ofp_port_config config;
+    enum ofp_port_config mask;
     uint32_t advertise;
     pad(4);
 };
@@ -554,7 +554,7 @@
     uint32_t xid;
     uint32_t buffer_id;
     of_port_no_t in_port;
-    uint16_t actions_len;
+    uint16_t actions_len == length(actions);
     list(of_action_t) actions;
     of_octets_t data;
 };
@@ -687,7 +687,7 @@
     of_match_t match;
     uint64_t cookie;
     uint16_t priority;
-    uint8_t reason;
+    enum ofp_flow_removed_reason reason;
     pad(1);
     uint32_t duration_sec;
     uint32_t duration_nsec;
diff --git a/openflow_input/standard-1.1 b/openflow_input/standard-1.1
index 6765fe7..07f246e 100644
--- a/openflow_input/standard-1.1
+++ b/openflow_input/standard-1.1
@@ -555,8 +555,8 @@
     pad(4);
     of_mac_addr_t hw_addr;
     pad(2);
-    uint32_t config;
-    uint32_t mask;
+    enum ofp_port_config config;
+    enum ofp_port_config mask;
     uint32_t advertise;
     pad(4);
 };
@@ -761,7 +761,7 @@
     uint32_t xid;
     uint32_t buffer_id;
     of_port_no_t in_port;
-    uint16_t actions_len;
+    uint16_t actions_len == length(actions);
     pad(6);
     list(of_action_t) actions;
     of_octets_t data;
@@ -1033,7 +1033,7 @@
     uint32_t xid;
     uint64_t cookie;
     uint16_t priority;
-    uint8_t reason;
+    enum ofp_flow_removed_reason reason;
     uint8_t table_id;
     uint32_t duration_sec;
     uint32_t duration_nsec;
diff --git a/openflow_input/standard-1.2 b/openflow_input/standard-1.2
index c1e8a2b..9141f22 100644
--- a/openflow_input/standard-1.2
+++ b/openflow_input/standard-1.2
@@ -594,8 +594,8 @@
     pad(4);
     of_mac_addr_t hw_addr;
     pad(2);
-    uint32_t config;
-    uint32_t mask;
+    enum ofp_port_config config;
+    enum ofp_port_config mask;
     uint32_t advertise;
     pad(4);
 };
@@ -948,7 +948,7 @@
     uint32_t xid;
     uint32_t buffer_id;
     of_port_no_t in_port;
-    uint16_t actions_len;
+    uint16_t actions_len == length(actions);
     pad(6);
     list(of_action_t) actions;
     of_octets_t data;
@@ -975,7 +975,7 @@
     uint32_t xid;
     uint64_t cookie;
     uint16_t priority;
-    uint8_t reason;
+    enum ofp_flow_removed_reason reason;
     uint8_t table_id;
     uint32_t duration_sec;
     uint32_t duration_nsec;
@@ -1121,7 +1121,7 @@
     uint32_t xid;
     uint16_t err_type == 0xffff;
     uint16_t subtype;
-    uint32_t experimenter;
+    uint32_t experimenter == ?;
     of_octets_t data;
 };
 
@@ -1214,7 +1214,7 @@
     list(of_bucket_t) buckets;
 };
 
-// STATS: 
+// STATS:
 //  Desc, flow, agg, table, port, queue, group, group_desc, group_feat, experi
 
 struct of_stats_request : of_header {
@@ -1453,7 +1453,7 @@
     enum ofp_stats_reply_flags flags;
     pad(4);
     uint32_t types;
-    uint32_t capabilities;
+    enum ofp_group_capabilities capabilities;
     uint32_t max_groups_all;
     uint32_t max_groups_select;
     uint32_t max_groups_indirect;
diff --git a/openflow_input/standard-1.3 b/openflow_input/standard-1.3
index 1edabb2..43490ac 100644
--- a/openflow_input/standard-1.3
+++ b/openflow_input/standard-1.3
@@ -742,8 +742,8 @@
     pad(4);
     of_mac_addr_t hw_addr;
     pad(2);
-    uint32_t config;
-    uint32_t mask;
+    enum ofp_port_config config;
+    enum ofp_port_config mask;
     uint32_t advertise;
     pad(4);
 };
@@ -755,7 +755,7 @@
     list(of_oxm_t) oxm_list;
 };
 
-// This looks like an action header, but is standalone.  See 
+// This looks like an action header, but is standalone.  See
 // ofp_table_features_prop_actions
 struct of_action_id {
     uint16_t type;
@@ -1127,7 +1127,7 @@
     uint32_t xid;
     uint32_t buffer_id;
     of_port_no_t in_port;
-    uint16_t actions_len;
+    uint16_t actions_len == length(actions);
     pad(6);
     list(of_action_t) actions;
     of_octets_t data;
@@ -1155,7 +1155,7 @@
     uint32_t xid;
     uint64_t cookie;
     uint16_t priority;
-    uint8_t reason;
+    enum ofp_flow_removed_reason reason;
     uint8_t table_id;
     uint32_t duration_sec;
     uint32_t duration_nsec;
@@ -1203,8 +1203,8 @@
     uint8_t type == 29;
     uint16_t length;
     uint32_t xid;
-    uint16_t command;
-    uint16_t flags;
+    enum ofp_meter_mod_command command;
+    enum ofp_meter_flags flags;
     uint32_t meter_id;
     list(of_meter_band_t) meters;
 };
@@ -1364,7 +1364,7 @@
     uint32_t xid;
     uint16_t err_type == 0xffff;
     uint16_t subtype;
-    uint32_t experimenter;
+    uint32_t experimenter == ?;
     of_octets_t data;
 };
 
@@ -1452,7 +1452,7 @@
     list(of_bucket_t) buckets;
 };
 
-// STATS: 
+// STATS:
 //  Desc, flow, agg, table, port, queue, group, group_desc, group_feat, experi
 
 struct of_stats_request : of_header {
@@ -1842,7 +1842,7 @@
     enum ofp_stats_reply_flags flags;
     pad(4);
     uint32_t types;
-    uint32_t capabilities;
+    enum ofp_group_capabilities capabilities;
     uint32_t max_groups_all;
     uint32_t max_groups_select;
     uint32_t max_groups_indirect;
@@ -1988,7 +1988,7 @@
 
 struct of_meter_config {
     uint16_t        length;
-    uint16_t        flags;
+    enum ofp_meter_flags        flags;
     uint32_t        meter_id;
     list(of_meter_band_t) entries;
 };
diff --git a/openflow_input/standard-1.4 b/openflow_input/standard-1.4
index 28aa787..af657d1 100644
--- a/openflow_input/standard-1.4
+++ b/openflow_input/standard-1.4
@@ -934,7 +934,7 @@
 struct of_port_mod_prop_ethernet : of_port_mod_prop {
     uint16_t type == 0;
     uint16_t length;
-    uint32_t advertise;
+    enum ofp_port_features advertise;
 };
 
 struct of_port_mod_prop_optical : of_port_mod_prop {
@@ -963,8 +963,8 @@
     pad(4);
     of_mac_addr_t hw_addr;
     pad(2);
-    uint32_t config;
-    uint32_t mask;
+    enum ofp_port_config config;
+    enum ofp_port_config mask;
     list(of_port_mod_prop_t) properties;
 };
 
@@ -1347,7 +1347,7 @@
     uint32_t xid;
     uint32_t buffer_id;
     of_port_no_t in_port;
-    uint16_t actions_len;
+    uint16_t actions_len == length(actions);
     pad(6);
     list(of_action_t) actions;
     of_octets_t data;
@@ -1375,7 +1375,7 @@
     uint32_t xid;
     uint64_t cookie;
     uint16_t priority;
-    uint8_t reason;
+    enum ofp_flow_removed_reason reason;
     uint8_t table_id;
     uint32_t duration_sec;
     uint32_t duration_nsec;
@@ -1423,8 +1423,8 @@
     uint8_t type == 29;
     uint16_t length;
     uint32_t xid;
-    uint16_t command;
-    uint16_t flags;
+    enum ofp_meter_mod_command command;
+    enum ofp_meter_flags flags;
     uint32_t meter_id;
     list(of_meter_band_t) bands;
 };
@@ -1624,7 +1624,7 @@
     uint32_t xid;
     uint16_t err_type == 0xffff;
     uint16_t subtype;
-    uint32_t experimenter;
+    uint32_t experimenter == ?;
     of_octets_t data;
 };
 
@@ -1682,7 +1682,7 @@
     uint16_t         length;
     pad(4);
 
-    uint32_t flags;       
+    uint32_t flags;
     uint32_t tx_freq_lmda;
     uint32_t tx_offset;
     uint32_t tx_grid_span;
@@ -1701,7 +1701,7 @@
     uint16_t         length;
     uint32_t         experimenter == ?;
     uint32_t         exp_type;
-    of_octets_t      experimenter_data;
+    /* of_octets_t      experimenter_data;  Implementing property defines fields. */
 };
 
 struct of_port_stats_entry {
@@ -1933,98 +1933,98 @@
     uint16_t         length;
 };
 
-struct of_table_feature_prop_instructions : of_table_feature_prop {
+struct of_table_feature_prop_instructions(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 0;
     uint16_t         length;
     // FIXME Check if instruction_t is right for ids here
     list(of_instruction_id_t)   instruction_ids;
 };
 
-struct of_table_feature_prop_instructions_miss : of_table_feature_prop {
+struct of_table_feature_prop_instructions_miss(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 1;
     uint16_t         length;
     list(of_instruction_id_t)   instruction_ids;
 };
 
-struct of_table_feature_prop_next_tables : of_table_feature_prop {
+struct of_table_feature_prop_next_tables(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 2;
     uint16_t         length;
     list(of_uint8_t) next_table_ids;
 };
 
-struct of_table_feature_prop_next_tables_miss : of_table_feature_prop {
+struct of_table_feature_prop_next_tables_miss(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 3;
     uint16_t         length;
     list(of_uint8_t) next_table_ids;
 };
 
-struct of_table_feature_prop_write_actions : of_table_feature_prop {
+struct of_table_feature_prop_write_actions(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 4;
     uint16_t         length;
     list(of_action_id_t) action_ids;
 };
 
-struct of_table_feature_prop_write_actions_miss : of_table_feature_prop {
+struct of_table_feature_prop_write_actions_miss(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 5;
     uint16_t         length;
     list(of_action_id_t) action_ids;
 };
 
-struct of_table_feature_prop_apply_actions : of_table_feature_prop {
+struct of_table_feature_prop_apply_actions(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 6;
     uint16_t         length;
     list(of_action_id_t) action_ids;
 };
 
-struct of_table_feature_prop_apply_actions_miss : of_table_feature_prop {
+struct of_table_feature_prop_apply_actions_miss(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 7;
     uint16_t         length;
     list(of_action_id_t) action_ids;
 };
 
-struct of_table_feature_prop_match : of_table_feature_prop {
+struct of_table_feature_prop_match(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 8;
     uint16_t         length;
     list(of_uint32_t) oxm_ids;
 };
 
-struct of_table_feature_prop_wildcards : of_table_feature_prop {
+struct of_table_feature_prop_wildcards(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 10;
     uint16_t         length;
     list(of_uint32_t) oxm_ids;
 };
 
-struct of_table_feature_prop_write_setfield : of_table_feature_prop {
+struct of_table_feature_prop_write_setfield(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 12;
     uint16_t         length;
     list(of_uint32_t) oxm_ids;
 };
 
-struct of_table_feature_prop_write_setfield_miss : of_table_feature_prop {
+struct of_table_feature_prop_write_setfield_miss(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 13;
     uint16_t         length;
     list(of_uint32_t) oxm_ids;
 };
 
-struct of_table_feature_prop_apply_setfield : of_table_feature_prop {
+struct of_table_feature_prop_apply_setfield(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 14;
     uint16_t         length;
     list(of_uint32_t) oxm_ids;
 };
 
-struct of_table_feature_prop_apply_setfield_miss : of_table_feature_prop {
+struct of_table_feature_prop_apply_setfield_miss(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 15;
     uint16_t         length;
     list(of_uint32_t) oxm_ids;
 };
 
-struct of_table_feature_prop_table_sync_from : of_table_feature_prop {
+struct of_table_feature_prop_table_sync_from(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 16;
     uint16_t         length;
     list(of_uint8_t) table_ids;
 };
 
-struct of_table_feature_prop_experimenter : of_table_feature_prop {
+struct of_table_feature_prop_experimenter(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 65534;
     uint16_t         length;
     uint32_t         experimenter == ?;
@@ -2032,7 +2032,7 @@
     of_octets_t      experimenter_data;
 };
 
-struct of_table_feature_prop_experimenter_miss : of_table_feature_prop {
+struct of_table_feature_prop_experimenter_miss(align=8, length_includes_align=False) : of_table_feature_prop {
     uint16_t         type == 65535;
     uint16_t         length;
     uint32_t         experimenter == ?;
@@ -2170,7 +2170,7 @@
     enum ofp_stats_reply_flags flags;
     pad(4);
     uint32_t types;
-    uint32_t capabilities;
+    enum ofp_group_capabilities capabilities;
     uint32_t max_groups_all;
     uint32_t max_groups_select;
     uint32_t max_groups_indirect;
@@ -2333,6 +2333,8 @@
     uint16_t stats_type == 15;
     enum ofp_stats_request_flags flags;
     pad(4);
+    of_port_no_t port_no;
+    uint32_t queue_id;
 };
 
 struct of_queue_desc_prop {
@@ -2406,7 +2408,7 @@
 
 struct of_meter_config {
     uint16_t        length;
-    uint16_t        flags;
+    enum ofp_meter_flags        flags;
     uint32_t        meter_id;
     list(of_meter_band_t) entries;
 };
@@ -2642,7 +2644,7 @@
     uint8_t type == 30;
     uint16_t length;
     uint32_t xid;
-    uint32_t role;
+    enum ofp_controller_role role;
     enum ofp_controller_role_reason reason;
     pad(3);
     uint64_t generation_id;
diff --git a/openflow_input/standard-1.5 b/openflow_input/standard-1.5
new file mode 100644
index 0000000..cf0a8ec
--- /dev/null
+++ b/openflow_input/standard-1.5
@@ -0,0 +1,3610 @@
+
+#version 6
+
+/* ------------------------------------------- MACRO DEFINITIONS ------------------------------ */
+enum macro_definitions {
+    OFP_MAX_TABLE_NAME_LEN = 32,
+    OFP_MAX_PORT_NAME_LEN = 16,
+
+    OFP_TCP_PORT = 6653,
+    OFP_SSL_PORT = 6653,
+
+    OFP_ETH_ALEN = 6,
+
+    OFP_DEFAULT_MISS_SEND_LEN = 128,
+
+    OFP_VLAN_NONE = 0,
+
+    OFP_FLOW_PERMANENT = 0,
+
+    OFP_DEFAULT_PRIORITY = 0x8000,
+
+    OFP_NO_BUFFER = 0xffffffff,
+
+    DESC_STR_LEN = 256,
+    SERIAL_NUM_LEN = 32,
+
+    OFPQ_ALL = 0xffffffff,
+    OFPQ_MAX_RATE_UNCFG = 0xffff,
+    OFPQ_MIN_RATE_UNCFG = 0xffff,
+};
+
+/* ------------------------------------------- SPECIAL STRUCTURES ---------------------------------- */
+
+struct of_uint64 {
+    uint64_t value;
+};
+
+struct of_uint32 {
+    uint32_t value;
+};
+
+struct of_uint8 {
+    uint8_t value;
+};
+
+/* ------------------------------------------- HEADER ------------------------------------- */
+
+/* Type for header */
+enum ofp_type(wire_type=uint8_t) {
+    OFPT_HELLO = 0,
+    OFPT_ERROR = 1,
+    OFPT_ECHO_REQUEST = 2,
+    OFPT_ECHO_REPLY = 3,
+    OFPT_EXPERIMENTER = 4,
+    OFPT_FEATURES_REQUEST = 5,
+    OFPT_FEATURES_REPLY = 6,
+    OFPT_GET_CONFIG_REQUEST = 7,
+    OFPT_GET_CONFIG_REPLY = 8,
+    OFPT_SET_CONFIG = 9,
+    OFPT_PACKET_IN = 10,
+    OFPT_FLOW_REMOVED = 11,
+    OFPT_PORT_STATUS = 12,
+    OFPT_PACKET_OUT = 13,
+    OFPT_FLOW_MOD = 14,
+    OFPT_GROUP_MOD = 15,
+    OFPT_PORT_MOD = 16,
+    OFPT_TABLE_MOD = 17,
+    OFPT_STATS_REQUEST = 18, /* Tüm sürümler için ayný olsun diye multipart yerine stats */
+    OFPT_STATS_REPLY = 19, /* Tüm sürümler için ayný olsun diye multipart yerine stats */
+    OFPT_BARRIER_REQUEST = 20,
+    OFPT_BARRIER_REPLY = 21,
+    OFPT_ROLE_REQUEST = 24,
+    OFPT_ROLE_REPLY = 25,
+    OFPT_GET_ASYNC_REQUEST = 26,
+    OFPT_GET_ASYNC_REPLY = 27,
+    OFPT_SET_ASYNC = 28,
+    OFPT_METER_MOD = 29,
+    OFPT_ROLE_STATUS = 30,
+    OFPT_TABLE_STATUS = 31,
+    OFPT_REQUESTFORWARD = 32,
+    OFPT_BUNDLE_CONTROL = 33,
+    OFPT_BUNDLE_ADD_MESSAGE = 34,
+    OFPT_CONTROLLER_STATUS = 35, /* 1.4 den sonra yeni gelmis */
+};
+
+/* Header on all OpenFlow packets */
+struct of_header {
+    uint8_t version;
+    uint8_t type == ?;
+    uint16_t length;
+    uint32_t xid;
+};
+
+
+/* ----------------------------------- HEADER TYPES (FOR DIFFERENT PACKETS) ------------------------- */
+
+/* Namespaces */
+/* Used in header_type */
+enum ofp_header_type_namespace(wire_type=uint16_t, stable=True) {
+    OFPHTN_ONF = 0,
+    OFPHTN_ETHERTYPE = 1,
+    OFPHTN_IP_PROTO = 2,
+    OFPHTN_UDP_TCP_PORT = 3,
+    OFPHTN_IPV4_OPTION = 4,
+};
+
+/* ONF namespaces */
+enum ofp_header_type_onf(wire_type=uint16_t, stable=True, complete=False) {
+    OFPHTO_ETHERNET = 0,
+    OFPHTO_NO_HEADER = 1,
+    OFPHTO_OXM_EXPERIMENTER = 0xFFFF,
+};
+
+/* Header type structure. */
+struct of_header_type {
+    enum ofp_header_type_namespace namespace == ?;
+    uint16_t ns_type;
+};
+
+/* --------------------------------------------------- PORT -------------------------------------------------- */
+
+/* Port numbering */
+/* Tüm sürümler için ayný olsun diye ofp_port_no yerine port */
+enum ofp_port(wire_type=uint32_t) {
+    OFPP_MAX = 0xffffff00,
+    OFPP_UNSET = 0xfffffff7,
+    OFPP_IN_PORT = 0xfffffff8,
+    OFPP_TABLE = 0xfffffff9,
+    OFPP_NORMAL = 0xfffffffa,
+    OFPP_FLOOD = 0xfffffffb,
+    OFPP_ALL = 0xfffffffc,
+    OFPP_CONTROLLER = 0xfffffffd,
+    OFPP_LOCAL = 0xfffffffe,
+    OFPP_ANY = 0xffffffff,
+};
+
+/* Flags to indicate behavior of the physical port */
+/* Used in of_port_desc and ofp_port_mod message */
+enum ofp_port_config(wire_type=uint32_t, bitmask=True) {
+    OFPPC_PORT_DOWN = 0x1,
+    OFPPC_NO_RECV = 0x4,
+    OFPPC_NO_FWD = 0x20,
+    OFPPC_NO_PACKET_IN = 0x40,
+    OFPPC_BSN_MIRROR_DEST = 0x80000000, /* header dosyalarýnda bulunmuyor */
+};
+
+/* Current state of the physical port */
+/* Not configurable from the controller */
+/* Used in of_port_desc */
+enum ofp_port_state(wire_type=uint32_t, bitmask=True) {
+    OFPPS_LINK_DOWN = 0x1,
+    OFPPS_BLOCKED = 0x2,
+    OFPPS_LIVE = 0x4,
+};
+
+/* Port description property types */
+/* not in before */
+/* Used in of_port_desc_prop_ethernet */
+enum ofp_port_desc_prop_type {
+   OFPPDPT_ETHERNET = 0,
+   OFPPDPT_OPTICAL = 1,
+   OFPPDPT_PIPELINE_INPUT = 2,
+   OFPPDPT_PIPELINE_OUTPUT = 3,
+   OFPPDPT_RECIRCULATE = 4,
+   OFPPDPT_EXPERIMENTER = 0xFFFF,
+};
+
+/* Features of ports available in a datapath. */
+enum ofp_port_features(wire_type=uint32_t, bitmask=True) {
+    OFPPF_10MB_HD = 0x1,
+    OFPPF_10MB_FD = 0x2,
+    OFPPF_100MB_HD = 0x4,
+    OFPPF_100MB_FD = 0x8,
+    OFPPF_1GB_HD = 0x10,
+    OFPPF_1GB_FD = 0x20,
+    OFPPF_10GB_FD = 0x40,
+    OFPPF_40GB_FD = 0x80,
+    OFPPF_100GB_FD = 0x100,
+    OFPPF_1TB_FD = 0x200,
+    OFPPF_OTHER = 0x400,
+    OFPPF_COPPER = 0x800,
+    OFPPF_FIBER = 0x1000,
+    OFPPF_AUTONEG = 0x2000,
+    OFPPF_PAUSE = 0x4000,
+    OFPPF_PAUSE_ASYM = 0x8000,
+    OFPPF_BSN_BREAKOUT_CAPABLE = 0x80000000, /* not in spec. */
+};
+
+/* Features of optical ports available in switch. */
+enum ofp_optical_port_features(wire_type=uint32_t, bitmask=True) {
+    OFPOPF_RX_TUNE = 0x1,
+    OFPOPF_TX_TUNE = 0x2,
+    OFPOPF_TX_PWR = 0x4,
+    OFPOPF_USE_FREQ = 0x8,
+};
+
+/* Description of a port */
+/* Tüm sürümler için ayný olsun diye ofp_port yerine of_port_desc */
+struct of_port_desc {
+    of_port_no_t port_no;
+    uint16_t length;
+    pad(2);
+    of_mac_addr_t hw_addr;
+    pad(2);
+    of_port_name_t name;
+    enum ofp_port_config config; /* Bitmap of OFPPC_* flags. */
+    enum ofp_port_state state; /* Bitmap of OFPPS_* flags. */
+    list(of_port_desc_prop_t) properties;
+};
+
+/* Common header for all port description properties. */
+struct of_port_desc_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Ethernet port description property. */
+struct of_port_desc_prop_ethernet : of_port_desc_prop {
+    uint16_t type == 0;
+    uint16_t length;
+    pad(4);
+    uint32_t curr;
+    uint32_t advertised;
+    uint32_t supported;
+    uint32_t peer;
+    uint32_t curr_speed;
+    uint32_t max_speed;
+};
+
+/* Optical port description property. */
+struct of_port_desc_prop_optical : of_port_desc_prop {
+    uint16_t type == 1;
+    uint16_t length;
+    pad(4);
+    uint32_t supported;
+    uint32_t tx_min_freq_lmda;
+    uint32_t tx_max_freq_lmda;
+    uint32_t tx_grid_freq_lmda;
+    uint32_t rx_min_freq_lmda;
+    uint32_t rx_max_freq_lmda;
+    uint32_t rx_grid_freq_lmda;
+    uint16_t tx_pwr_min;
+    uint16_t tx_pwr_max;
+};
+
+/* Ingress pipeline fields description property */
+/* In 1.5.1 spec ofp_port_desc_prop_oxm */
+struct of_port_desc_prop_ingress {
+    uint16_t type == 2;
+    uint16_t length;
+    of_octets_t oxm_ids;
+};
+
+/* Egress pipeline fields description property */
+/* In 1.5.1 spec ofp_port_desc_prop_oxm */
+struct of_port_desc_prop_egress {
+    uint16_t type == 3;
+    uint16_t length;
+    of_octets_t oxm_ids;
+};
+
+/* Recirculate port description property. */
+struct ofp_port_desc_prop_recirculate {
+    uint16_t type == 4;
+    uint16_t length;
+    of_octets_t port_nos;
+};
+
+
+/* Experimenter port description property. */
+struct of_port_desc_prop_experimenter : of_port_desc_prop {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* ----------------------------------------------- FLOW MATCH -------------------------------------- */
+
+/* Match Type */
+/* Standard deprecated olmuþ */
+enum ofp_match_type(wire_type=uint16_t) {
+    OFPMT_STANDARD = 0,
+    OFPMT_OXM = 1,
+};
+
+/* OXM Class IDs */
+enum ofp_oxm_class(wire_type=uint16_t) {
+    OFPXMC_NXM_0 = 0,
+    OFPXMC_NXM_1 = 1,
+    OFPXMC_OPENFLOW_BASIC = 0x8000,
+    OFPXMC_PACKET_REGS = 0x8001,
+    OFPXMC_EXPERIMENTER = 0xffff,
+};
+
+
+/* VLAN id set or not */
+enum ofp_vlan_id(wire_type=uint16_t) {
+    OFPVID_NONE = 0,
+    OFPVID_PRESENT = 0x1000,
+};
+
+// FIXME: OF spec specified this as '9' bits, implicitly adding to full byte
+/* Bit definitions for IPv6 Extension Header pseudo-field. */
+enum ofp_ipv6exthdr_flags(wire_type=uint16_t, bitmask=True) {
+    OFPIEH_NONEXT = 0x1,
+    OFPIEH_ESP = 0x2,
+    OFPIEH_AUTH = 0x4,
+    OFPIEH_DEST = 0x8,
+    OFPIEH_FRAG = 0x10,
+    OFPIEH_ROUTER = 0x20,
+    OFPIEH_HOP = 0x40,
+    OFPIEH_UNREP = 0x80,
+    OFPIEH_UNSEQ = 0x100,
+};
+
+/* Flow Match */
+/* standard-1.0 içinde v1 olarak var */
+/* standard-1.1 içinde v2 olarak var */
+/* standard-1.2 den itibaren v3 olarak deðiþmiþ ve oxm classlarý oluþturulmuþ */
+struct of_match_v3(align=8, length_includes_align=False) {
+    uint16_t type == 1;
+    uint16_t length;
+    list(of_oxm_t) oxm_list;
+};
+
+/* --------------------------------------------------------- FLOW STATS ----------------------------------------------- */
+
+/* stats oxs class */
+/* not in 1.4  */
+enum ofp_oxs_class(wire_type=uint16_t) {
+    OFPXSC_OPENFLOW_BASIC = 0x8002,
+    OFPXSC_EXPERIMENTER = 0xFFFF,
+};
+
+struct of_stat_v6 (align=8, length_includes_align=False){
+    pad(2); /* reserved */
+    uint16_t length;
+    list(of_oxs_t) oxs_fields;
+};
+
+/* ---------------------------------------------------- FLOW INSTRUCTIONS --------------------------------------- */
+
+/* instruction types */
+enum ofp_instruction_type(wire_type=uint16_t, bitmask=True) {
+    OFPIT_GOTO_TABLE = 0x1,
+    OFPIT_WRITE_METADATA = 0x2,
+    OFPIT_WRITE_ACTIONS = 0x3,
+    OFPIT_APPLY_ACTIONS = 0x4,
+    OFPIT_CLEAR_ACTIONS = 0x5,
+    OFPIT_DEPRECATED = 0x6,
+    OFPIT_STAT_TRIGGER = 0x7,
+    OFPIT_EXPERIMENTER = 0xffff,
+};
+
+/* stat trigger instruction flags */
+/* not in 1.4 */
+enum ofp_stat_trigger_flags(wire_type=uint32_t, bitmask=True) {
+    OFPSTF_PERIODIC = 0x1,
+    OFPSTF_ONLY_FIRST = 0x2,
+};
+
+/* Instruction Header */
+struct of_instruction {
+    uint16_t type == ?;
+    uint16_t len;
+};
+
+/* Instruction structure for OFPIT_GOTO_TABLE */
+struct of_instruction_goto_table : of_instruction {
+    uint16_t type == 1;
+    uint16_t len;
+    uint8_t table_id;
+    pad(3);
+};
+
+/* Instruction structure for OFPIT_WRITE_METADATA */
+struct of_instruction_write_metadata : of_instruction {
+    uint16_t type == 2;
+    uint16_t len;
+    pad(4);
+    uint64_t metadata;
+    uint64_t metadata_mask;
+};
+
+/* Instruction structure for OFPIT_WRITE */
+struct of_instruction_write_actions : of_instruction {
+    uint16_t type == 3;
+    uint16_t len;
+    pad(4);
+    list(of_action_t) actions;
+};
+
+/* Instruction structure for OFPIT_APPLY */
+struct of_instruction_apply_actions : of_instruction {
+    uint16_t type == 4;
+    uint16_t len;
+    pad(4);
+    list(of_action_t) actions;
+};
+
+/* Instruction structure for OFPIT_CLEAR */
+struct of_instruction_clear_actions : of_instruction {
+    uint16_t type == 5;
+    uint16_t len;
+    pad(4);
+};
+
+/* Instruction structure for OFPIT_STAT_TRIGGER */
+/* not in 1.4 */
+struct of_instruction_stat_trigger : of_instruction {
+    uint16_t type == 7;
+    uint16_t len;
+    enum ofp_stat_trigger_flags flags;
+    list(of_oxs_t) thresholds;
+};
+
+/* Instruction structure for experimental instructions */
+struct of_instruction_experimenter : of_instruction {
+    uint16_t type == 65535;
+    uint16_t len;
+    uint32_t experimenter == ?;
+    of_octets_t data;
+};
+
+/* --------------------------------------------------------- ACTION STRUCTURES ----------------------------------------- */
+
+/* action types */
+enum ofp_action_type(wire_type=uint16_t) {
+    OFPAT_OUTPUT = 0,
+    OFPAT_COPY_TTL_OUT = 0xb,
+    OFPAT_COPY_TTL_IN = 0xc,
+    OFPAT_SET_MPLS_TTL = 0xf,
+    OFPAT_DEC_MPLS_TTL = 0x10,
+    OFPAT_PUSH_VLAN = 0x11,
+    OFPAT_POP_VLAN = 0x12,
+    OFPAT_PUSH_MPLS = 0x13,
+    OFPAT_POP_MPLS = 0x14,
+    OFPAT_SET_QUEUE = 0x15,
+    OFPAT_GROUP = 0x16,
+    OFPAT_SET_NW_TTL = 0x17,
+    OFPAT_DEC_NW_TTL = 0x18,
+    OFPAT_SET_FIELD = 0x19,
+    OFPAT_PUSH_PBB = 0x1a,
+    OFPAT_POP_PBB = 0x1b,
+    OFPAT_COPY_FIELD = 0x1c,
+    OFPAT_METER = 0x1d,
+    OFPAT_EXPERIMENTER = 0xffff,
+};
+
+/* Action header that is common to all actions */
+struct of_action {
+    uint16_t type == ?;
+    uint16_t len;
+};
+
+/* Action structure for OFPAT_OUTPUT */
+struct of_action_output : of_action {
+    uint16_t type == 0;
+    uint16_t len;
+    of_port_no_t port;
+    uint16_t max_len;
+    pad(6);
+};
+
+/*The max_len indicates the maximum amount of data from a packet that should be sent when the port is OFPP_CONTROLLER*/
+enum ofp_controller_max_len(wire_type=uint16_t, complete=False) {
+    OFPCML_MAX = 0xffe5,
+    OFPCML_NO_BUFFER = 0xffff,
+};
+
+/* Action structure for OFPAT_GROUP. */
+struct of_action_group : of_action {
+    uint16_t type == 22;
+    uint16_t len;
+    uint32_t group_id;
+};
+
+/* Action structure for OFPAT_SET_QUEUE. */
+struct of_action_set_queue : of_action {
+    uint16_t type == 21;
+    uint16_t len;
+    uint32_t queue_id;
+};
+
+/* Action structure for OFPAT_METER */
+struct of_action_meter : of_action {
+    uint16_t type == 29;
+    uint16_t len;
+    uint32_t meter_id;
+};
+
+/* Action structure for OFPAT_SET_MPLS_TTL. */
+struct of_action_set_mpls_ttl : of_action {
+    uint16_t type == 15;
+    uint16_t len;
+    uint8_t mpls_ttl;
+    pad(3);
+};
+
+/* Action structure for OFPAT_COPY_TTL_OUT */
+struct of_action_copy_ttl_out : of_action {
+    uint16_t type == 11;
+    uint16_t len;
+    pad(4);
+};
+
+/* Action structure for OFPAT_COPY_TTL_IN */
+struct of_action_copy_ttl_in : of_action {
+    uint16_t type == 12;
+    uint16_t len;
+    pad(4);
+};
+
+/* Action structure for OFPAT_DEC_MPLS_TTL */
+struct of_action_dec_mpls_ttl : of_action {
+    uint16_t type == 16;
+    uint16_t len;
+    pad(4);
+};
+
+/* Action structure for OFPAT_DEC_NW_TTL */
+struct of_action_dec_nw_ttl : of_action {
+    uint16_t type == 24;
+    uint16_t len;
+    pad(4);
+};
+
+/* Action structure for OFPAT_POP_VLAN */
+struct of_action_pop_vlan : of_action {
+    uint16_t type == 18;
+    uint16_t len;
+    pad(4);
+};
+
+/* Action structure for OFPAT_POP_PBB */
+struct of_action_pop_pbb : of_action {
+    uint16_t type == 27;
+    uint16_t len;
+    pad(4);
+};
+
+/* Action structure for OFPAT_SET_NW_TTL. */
+struct of_action_set_nw_ttl : of_action {
+    uint16_t type == 23;
+    uint16_t len;
+    uint8_t nw_ttl;
+    pad(3);
+};
+
+/* Action structure for OFPAT_PUSH_VLAN */
+struct of_action_push_vlan : of_action {
+    uint16_t type == 17;
+    uint16_t len;
+    uint16_t ethertype;
+    pad(2);
+};
+
+/* Action structure for OFPAT_PUSH_MPLS */
+struct of_action_push_mpls : of_action {
+    uint16_t type == 19;
+    uint16_t len;
+    uint16_t ethertype;
+    pad(2);
+};
+
+/* Action structure for OFPAT_PUSH_PBB */
+struct of_action_push_pbb : of_action {
+    uint16_t type == 26;
+    uint16_t len;
+    uint16_t ethertype;
+    pad(2);
+};
+
+/* Action structure for OFPAT_POP_MPLS */
+struct of_action_pop_mpls : of_action {
+    uint16_t type == 20;
+    uint16_t len;
+    uint16_t ethertype;
+    pad(2);
+};
+
+/* Action structure for OFPAT_SET_FIELD */
+struct of_action_set_field(align=8, length_includes_align=True) : of_action {
+    uint16_t type == 25;
+    uint16_t len;
+    of_oxm_t field;
+};
+
+/* Action structure for OFPAT_COPY_FIELD */
+/* not in 1.4 */
+struct ofp_action_copy_field {
+    uint16_t type == 28;
+    uint16_t len;
+    uint16_t n_bits;
+    uint16_t src_offset;
+    uint16_t dst_offset;
+    pad(2);
+    list(of_oxm_t) oxm_ids;
+};
+
+/* Action header for OFPAT_EXPERIMENTER */
+struct of_action_experimenter(align=8, length_includes_align=True): of_action {
+    uint16_t type == 65535;
+    uint16_t len;
+    uint32_t experimenter == ?;
+};
+
+/* ---------------------------------------------------------- CONTROLLER STATUS STRUCTURE ------------------------- */
+/* not in 1.4 */
+
+/* Why is the controller status being reported? */
+enum ofp_controller_status_reason(wire_type=uint8_t) {
+    OFPCSR_REQUEST = 0,
+    OFPCSR_CHANNEL_STATUS = 1,
+    OFPCSR_ROLE = 2,
+    OFPCSR_CONTROLLER_ADDED = 3,
+    OFPCSR_CONTROLLER_REMOVED = 4,
+    OFPCSR_SHORT_ID = 5,
+    OFPCSR_EXPERIMENTER = 6,
+};
+
+/* Control channel status. */
+enum ofp_control_channel_status(wire_type=uint8_t) {
+    OFPCT_STATUS_UP = 0,
+    OFPCT_STATUS_DOWN = 1,
+};
+
+/* Controller status property types */
+enum ofp_controller_status_prop_type {
+    OFPCSPT_URI = 0,
+    OFPCSPT_EXPERIMENTER = 0xFFFF,
+};
+
+/* Common header for all Controller Status Properties */
+struct of_controller_status_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+struct of_controller_status_entry {
+    uint16_t length;
+    uint16_t short_id;
+    enum ofp_controller_role role;
+    enum ofp_controller_status_reason reason;
+    enum ofp_control_channel_status channel_status;
+    pad(6);
+    list(of_controller_status_prop_t) properties;
+};
+
+/* Body of OFPMP_CONTROLLER_STATUS reply message and body of async OFPT_CONTROLLER_STATUS message */
+struct of_controller_status : of_header {
+    uint8_t version;
+    uint8_t type == 35;
+    uint16_t length;
+    uint32_t xid;
+    of_controller_status_entry_t entry;
+};
+
+/* Connection URI controller status property */
+struct ofp_controller_status_prop_uri : of_controller_status_prop {
+    uint16_t type == 0;
+    uint16_t length;
+    of_controller_uri_t uri;
+};
+
+/* Experimenter controller status property */
+struct ofp_controller_status_prop_experimenter : of_controller_status_prop {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* -------------------------------------------------- MESSAGES --------------------------------------------- */
+
+/* Capabilities supported by the datapath. */
+enum ofp_capabilities(wire_type=uint32_t, bitmask=True) {
+    OFPC_FLOW_STATS = 0x1,
+    OFPC_TABLE_STATS = 0x2,
+    OFPC_PORT_STATS = 0x4,
+    OFPC_GROUP_STATS = 0x8,
+    OFPC_IP_REASM = 0x20,
+    OFPC_QUEUE_STATS = 0x40,
+    OFPC_PORT_BLOCKED = 0x100,
+    OFPC_BUNDLES = 0x200,
+    OFPC_FLOW_MONITORING = 0x400,
+};
+
+/* Handling of IP fragments. */
+enum ofp_config_flags(wire_type=uint16_t, bitmask=True) {
+    OFPC_FRAG_NORMAL = 0,
+    OFPC_FRAG_DROP = 1,
+    OFPC_FRAG_REASM = 2,
+    OFPC_FRAG_MASK = 3,
+};
+
+/* Table numbering. Tables can use any number up to OFPT_MAX. */
+enum ofp_table(wire_type=uint8_t, complete=False) {
+    OFPTT_MAX = 0xfe,
+    OFPTT_ALL = 0xff,
+};
+
+
+/* Flags to configure the table. */
+enum ofp_table_config(wire_type=uint32_t, bitmask=True) {
+    OFPTC_DEPRECATED_MASK = 0x3,
+    OFPTC_EVICTION = 0x4,
+    OFPTC_VACANCY_EVENTS = 0x8,
+};
+
+/* Eviction flags. */
+enum ofp_table_mod_prop_eviction_flag(wire_type=uint32_t, bitmask=True) {
+    OFPTMPEF_OTHER = 0x1,
+    OFPTMPEF_IMPORTANCE = 0x2,
+    OFPTMPEF_LIFETIME = 0x4,
+};
+
+/* flow mod command */
+enum ofp_flow_mod_command(wire_type=uint8_t) {
+    OFPFC_ADD = 0,
+    OFPFC_MODIFY = 1,
+    OFPFC_MODIFY_STRICT = 2,
+    OFPFC_DELETE = 3,
+    OFPFC_DELETE_STRICT = 4,
+};
+
+/* flow mod flags */
+enum ofp_flow_mod_flags(wire_type=uint16_t, bitmask=True) {
+    OFPFF_SEND_FLOW_REM = 0x1,
+    OFPFF_CHECK_OVERLAP = 0x2,
+    OFPFF_RESET_COUNTS = 0x4,
+    OFPFF_NO_PKT_COUNTS = 0x8,
+    OFPFF_NO_BYT_COUNTS = 0x10,
+
+    /* Non-standard, enabled by an experimenter message */
+    /* See the bsn_flow_idle input file */
+    OFPFF_BSN_SEND_IDLE = 0x80,
+};
+
+/* Group commands */
+enum ofp_group_mod_command(wire_type=uint16_t) {
+    OFPGC_ADD = 0,
+    OFPGC_MODIFY = 1,
+    OFPGC_DELETE = 2,
+    OFPGC_INSERT_BUCKET = 3,
+    OFPGC_REMOVE_BUCKET = 5,
+};
+
+/* Group types */
+enum ofp_group_type(wire_type=uint8_t) {
+    OFPGT_ALL = 0,
+    OFPGT_SELECT = 1,
+    OFPGT_INDIRECT = 2,
+    OFPGT_FF = 3,
+};
+
+/* Group numbering. Groups can use any number up to OFPG_MAX. */
+enum ofp_group(wire_type=uint32_t, complete=False) {
+    OFPG_MAX = 0xffffff00,
+    OFPG_ALL = 0xfffffffc,
+    OFPG_ANY = 0xffffffff,
+};
+
+/* Bucket Id can be any value between 0 and OFPG_BUCKET_MAX */
+enum ofp_group_bucket(wire_type=uint32_t) {
+    OFPG_BUCKET_MAX = 0xffffff00,
+    OFPG_BUCKET_FIRST = 0xfffffffd,
+    OFPG_BUCKET_LAST = 0xfffffffe,
+    OFPG_BUCKET_ALL = 0xffffffff,
+};
+
+/* Group bucket property types. */
+enum ofp_group_bucket_prop_type {
+    OFPGBPT_WEIGHT = 0,
+    OFPGBPT_WATCH_PORT = 1,
+    OFPGBPT_WATCH_GROUP = 2,
+    OFPGBPT_EXPERIMENTER = 0xFFFF,
+};
+
+/* Group property types. */
+enum ofp_group_prop_type {
+    OFPGPT_EXPERIMENTER = 0xFFFF,
+};
+
+/* Port mod property types */
+enum ofp_port_mod_prop_type {
+    OFPPMPT_ETHERNET = 0,
+    OFPPMPT_OPTICAL = 1,
+    OFPPMPT_EXPERIMENTER = 0xFFFF,
+};
+
+/* Meter numbering. Flow meters can use any number up to OFPM_MAX. */
+enum ofp_meter(wire_type=uint32_t, complete=False) {
+    OFPM_MAX = 0xffff0000,
+    OFPM_SLOWPATH = 0xfffffffd,
+    OFPM_CONTROLLER = 0xfffffffe,
+    OFPM_ALL = 0xffffffff,
+};
+
+/* Meter commands */
+enum ofp_meter_mod_command(wire_type=uint16_t) {
+    OFPMC_ADD = 0,
+    OFPMC_MODIFY = 1,
+    OFPMC_DELETE = 2,
+};
+
+/* Meter configuration flags */
+enum ofp_meter_flags(wire_type=uint16_t, bitmask=True) {
+    OFPMF_KBPS = 0x1,
+    OFPMF_PKTPS = 0x2,
+    OFPMF_BURST = 0x4,
+    OFPMF_STATS = 0x8,
+};
+
+/* Meter band types */
+enum ofp_meter_band_type(wire_type=uint16_t) {
+    OFPMBT_DROP = 0x1,
+    OFPMBT_DSCP_REMARK = 0x2,
+    OFPMBT_EXPERIMENTER = 0xffff,
+};
+
+/* Multipart request flags */
+enum ofp_stats_request_flags(wire_type=uint16_t, bitmask=True) {
+    OFPSF_REQ_MORE = 0x1,
+};
+
+/* Multipart reply flags */
+enum ofp_stats_reply_flags(wire_type=uint16_t, bitmask=True) {
+    OFPSF_REPLY_MORE = 0x1,
+};
+
+/* 
+ * Multipart Message Types 
+ *
+ * OF1.5 renames the OFPMP/ST for:
+ * flow (1) -> flow_desc (1)
+ * aggregate (2) -> aggregate_stats (2)
+ * table (3) -> table_stats (3)
+ * group (6) -> group_stats (6)
+ * meter (9) -> meter_stats (9)
+ * meter_config (10) -> meter_desc (10)
+ * 
+ * OF1.4 renamed:
+ * queue (5) -> queue_stats (5)
+ * which was retained as "queue" in standard-1.4.
+ *
+ * Using different names for the same message
+ * in Loxi causes duplicate enum entries that
+ * map to essentially the same underlying message.
+ * For simpliciy, we can retain the original, 
+ * OF1.3-, naming convention to reduce complexity.
+ * This is why OF1.4+ ofp_stats_type enums from 
+ * OF1.3- remain as OFPST_* and do not appear as
+ * OFPMP_*.
+ *
+ * Using the _STATS is certainly more explicit; 
+ * however, that would perhaps necessitate changing
+ * OF1.3- OFPMP/ST names, which would break existing
+ * applications that use OF1.3- OFPMP/ST names.
+ */
+enum ofp_stats_type(wire_type=uint16_t) {
+    OFPST_DESC = 0,
+    OFPST_FLOW = 1, /* omit _desc */
+    OFPST_AGGREGATE = 2, /* omit _stats */
+    OFPST_TABLE = 3, /* omit _stats */
+    OFPST_PORT = 4, /* omit _stats; historically omitted */
+    OFPST_QUEUE = 5, /* omit _stats */
+    OFPST_GROUP = 6, /* omit _stats */
+    OFPST_GROUP_DESC = 7,
+    OFPST_GROUP_FEATURES = 8,
+    OFPST_METER = 9, /* omit_stats */
+    OFPST_METER_CONFIG = 10, /* retain OFPST_ prefix; retain _config */
+    OFPST_METER_FEATURES = 11,
+    OFPST_TABLE_FEATURES = 12,
+    OFPST_PORT_DESC = 13,
+    OFPMP_TABLE_DESC = 14,
+    OFPMP_QUEUE_DESC = 15,
+    OFPMP_FLOW_MONITOR = 16,
+    OFPMP_FLOW_LIGHTWEIGHT = 17, /* omit _stats; use _lightweight to imply no desc included */
+    OFPMP_CONTROLLER_STATUS = 18,
+    OFPMP_BUNDLE_FEATURES = 19,
+    OFPST_EXPERIMENTER = 0xffff,
+};
+
+/* Reason for generating flow stats. */
+enum ofp_flow_stats_reason(wire_type=uint8_t) {
+    OFPFSR_STATS_REQUEST = 0,
+    OFPFSR_STAT_TRIGGER = 1,
+};
+
+/* Port stats property types.  */
+enum ofp_port_stats_prop_type(wire_type=uint16_t) {
+    OFPPSPT_ETHERNET          = 0,      /* Ethernet property. */
+    OFPPSPT_OPTICAL           = 1,      /* Optical property. */
+    OFPPSPT_EXPERIMENTER      = 0xFFFF, /* Experimenter property. */
+};
+
+/* Flags is one of OFPOSF_ below */
+enum ofp_port_stats_optical_flags(wire_type=uint32_t, bitmask=True) {
+    OFPOSF_RX_TUNE = 0x1,
+    OFPOSF_TX_TUNE = 0x2,
+    OFPOSF_TX_PWR = 0x4,
+    OFPOSF_RX_PWR = 0x10,
+    OFPOSF_TX_BIAS = 0x20,
+    OFPOSF_TX_TEMP = 0x40,
+};
+
+/* queue statistics property types */
+enum ofp_queue_stats_prop_type {
+    OFPQSPT_EXPERIMENTER = 0xffff
+};
+
+/* queue description property types */
+enum ofp_queue_desc_prop_type {
+    OFPQDPT_MIN_RATE = 1,
+    OFPQDPT_MAX_RATE = 2,
+    OFPQDPT_EXPERIMENTER = 0xffff,
+};
+
+/* Group configuration flags */
+enum ofp_group_capabilities(wire_type=uint32_t, bitmask=True) {
+    OFPGFC_SELECT_WEIGHT = 0x1,
+    OFPGFC_SELECT_LIVENESS = 0x2,
+    OFPGFC_CHAINING = 0x4,
+    OFPGFC_CHAINING_CHECKS = 0x8,
+};
+
+/* Meter feature flags */
+enum ofp_meter_feature_flags(wire_type=uint32_t, bitmask=True) {
+    OFPMFF_ACTION_SET = 0x1,
+    OFPMFF_ANY_POSITION = 0x2,
+    OFPMFF_MULTI_LIST = 0x4,
+};
+
+/* Table Features request commands */
+enum ofp_table_features_command(wire_type=uint8_t) {
+    OFPTFC_REPLACE = 0,
+    OFPTFC_MODIFY = 1,
+    OFPTFC_ENABLE = 2,
+    OFPTFC_DISABLE = 3,
+};
+
+/* Flags of features supported by the table. */
+enum ofp_table_feature_flag (wire_type=uint32_t, bitmask=True) {
+    OFPTFF_INGRESS_TABLE = 0x1,
+    OFPTFF_EGRESS_TABLE = 0x2,
+    OFPTFF_FIRST_EGRESS = 0x10,
+};
+
+/* Table Feature property types. */
+enum ofp_table_feature_prop_type(wire_type=uint16_t) {
+    OFPTFPT_INSTRUCTIONS = 0,
+    OFPTFPT_INSTRUCTIONS_MISS = 1,
+    OFPTFPT_NEXT_TABLES = 2,
+    OFPTFPT_NEXT_TABLES_MISS = 3,
+    OFPTFPT_WRITE_ACTIONS = 4,
+    OFPTFPT_WRITE_ACTIONS_MISS = 5,
+    OFPTFPT_APPLY_ACTIONS = 6,
+    OFPTFPT_APPLY_ACTIONS_MISS = 7,
+    OFPTFPT_MATCH = 8,
+    OFPTFPT_WILDCARDS = 0xa,
+    OFPTFPT_WRITE_SETFIELD = 0xc,
+    OFPTFPT_WRITE_SETFIELD_MISS = 0xd,
+    OFPTFPT_APPLY_SETFIELD = 0xe,
+    OFPTFPT_APPLY_SETFIELD_MISS = 0xf,
+    OFPTFPT_TABLE_SYNC_FROM = 0x10,
+    OFPTFPT_WRITE_COPYFIELD = 18,
+    OFPTFPT_WRITE_COPYFIELD_MISS = 19,
+    OFPTFPT_APPLY_COPYFIELD = 20,
+    OFPTFPT_APPLY_COPYFIELD_MISS = 21,
+    OFPTFPT_PACKET_TYPES = 22,
+    OFPTFPT_EXPERIMENTER = 0xfffe,
+    OFPTFPT_EXPERIMENTER_MISS = 0xffff,
+};
+
+/* Table Mod property types.*/
+enum ofp_table_mod_prop_type {
+    OFPTMPT_EVICTION = 0x2,
+    OFPTMPT_VACANCY = 0x3,
+    OFPTMPT_EXPERIMENTER = 0xFFFF,
+};
+
+
+/* controller roles */
+enum ofp_controller_role(wire_type=uint32_t) {
+    OFPCR_ROLE_NOCHANGE = 0,
+    OFPCR_ROLE_EQUAL = 1,
+    OFPCR_ROLE_MASTER = 2,
+    OFPCR_ROLE_SLAVE = 3,
+};
+
+/* Bundle control message types */
+enum ofp_bundle_ctrl_type(wire_type=uint16_t) {
+    OFPBCT_OPEN_REQUEST = 0,
+    OFPBCT_OPEN_REPLY = 1,
+    OFPBCT_CLOSE_REQUEST = 2,
+    OFPBCT_CLOSE_REPLY = 3,
+    OFPBCT_COMMIT_REQUEST = 4,
+    OFPBCT_COMMIT_REPLY = 5,
+    OFPBCT_DISCARD_REQUEST = 6,
+    OFPBCT_DISCARD_REPLY = 7,
+};
+
+/* Bundle configuration flags. */
+enum ofp_bundle_flags(wire_type=uint16_t, bitmask=True) {
+    OFPBF_ATOMIC = 1,
+    OFPBF_ORDERED = 2,
+    OFPBF_TIME = 4,
+};
+
+/* Bundle features property types. */
+enum ofp_bundle_features_prop_type {
+    OFPTMPBF_TIME_CAPABILITY = 0x1,
+    OFPTMPBF_EXPERIMENTER = 0xFFFF,
+};
+
+
+/* Bundle property types. */
+enum ofp_bundle_prop_type {
+    OFPBPT_TIME = 1,
+    OFPBPT_EXPERIMENTER = 0xFFFF,
+};
+
+
+/* Async Config property types.*/
+enum ofp_async_config_prop_type {
+    OFPACPT_PACKET_IN_SLAVE = 0,
+    OFPACPT_PACKET_IN_MASTER = 1,
+    OFPACPT_PORT_STATUS_SLAVE = 2,
+    OFPACPT_PORT_STATUS_MASTER = 3,
+    OFPACPT_FLOW_REMOVED_SLAVE = 4,
+    OFPACPT_FLOW_REMOVED_MASTER = 5,
+    OFPACPT_ROLE_STATUS_SLAVE = 6,
+    OFPACPT_ROLE_STATUS_MASTER = 7,
+    OFPACPT_TABLE_STATUS_SLAVE = 8,
+    OFPACPT_TABLE_STATUS_MASTER = 9,
+    OFPACPT_REQUESTFORWARD_SLAVE = 10,
+    OFPACPT_REQUESTFORWARD_MASTER = 11,
+    OFPACPT_FLOW_STATS_SLAVE = 12,
+    OFPACPT_FLOW_STATS_MASTER = 13,
+    OFPACPT_CONT_STATUS_SLAVE = 14,
+    OFPACPT_CONT_STATUS_MASTER = 15,
+    OFPACPT_EXPERIMENTER_SLAVE = 0xFFFE,
+    OFPACPT_EXPERIMENTER_MASTER = 0xFFFF,
+};
+
+/* Why is this packet being sent to the controller? */
+enum ofp_packet_in_reason(wire_type=uint8_t) {
+    OFPR_NO_MATCH = 0,
+    OFPR_ACTION = 1,
+    OFPR_INVALID_TTL = 2,
+    OFPR_ACTION_SET = 3,
+    OFPR_GROUP = 4,
+    OFPR_PACKET_OUT = 5,
+
+    // non-standard BSN extensions. OF does not have a standard-conformant
+    // way to extend the set of packet_in reasons
+    OFPR_BSN_NEW_HOST = 128,
+    OFPR_BSN_STATION_MOVE = 129,
+    OFPR_BSN_BAD_VLAN = 130,
+    OFPR_BSN_DESTINATION_LOOKUP_FAILURE = 131,
+    OFPR_BSN_NO_ROUTE = 132,
+    OFPR_BSN_ICMP_ECHO_REQUEST = 133,
+    OFPR_BSN_DEST_NETWORK_UNREACHABLE = 134,
+    OFPR_BSN_DEST_HOST_UNREACHABLE = 135,
+    OFPR_BSN_DEST_PORT_UNREACHABLE = 136,
+    OFPR_BSN_FRAGMENTATION_REQUIRED = 137,
+    OFPR_BSN_ARP = 139,
+    OFPR_BSN_DHCP = 140,
+    OFPR_BSN_DEBUG = 141,
+    OFPR_BSN_PACKET_OF_DEATH = 142,
+};
+
+/* Why was this flow removed? */
+enum ofp_flow_removed_reason(wire_type=uint8_t) {
+    OFPRR_IDLE_TIMEOUT = 0,
+    OFPRR_HARD_TIMEOUT = 1,
+    OFPRR_DELETE = 2,
+    OFPRR_GROUP_DELETE = 3,
+    OFPRR_METER_DELETE = 4,
+    OFPRR_EVICTION = 5,
+};
+
+/* What changed about the physical port */
+enum ofp_port_reason(wire_type=uint8_t) {
+    OFPPR_ADD = 0,
+    OFPPR_DELETE = 1,
+    OFPPR_MODIFY = 2,
+};
+
+/* What changed about the controller role */
+enum ofp_controller_role_reason(wire_type=uint8_t) {
+    OFPCRR_MASTER_REQUEST = 0,
+    OFPCRR_CONFIG = 1,
+    OFPCRR_EXPERIMENTER = 2,
+};
+
+/* Role property types.*/
+enum ofp_role_prop_type {
+    OFPRPT_EXPERIMENTER = 0xFFFF,
+};
+
+/* What changed about the table */
+enum ofp_table_reason(wire_type=uint8_t) {
+    OFPTR_VACANCY_DOWN = 3,
+    OFPTR_VACANCY_UP = 4,
+};
+
+/* Request forward reason */
+enum ofp_requestforward_reason {
+    OFPRFR_GROUP_MOD = 0,
+    OFPRFR_METER_MOD = 1,
+};
+
+/* Hello elements types. */
+enum ofp_hello_elem_type(wire_type=uint16_t) {
+    OFPHET_VERSIONBITMAP = 1,
+};
+
+/* Values for ’type’ in ofp_error_message */
+enum ofp_error_type(wire_type=uint16_t) {
+    OFPET_HELLO_FAILED = 0,
+    OFPET_BAD_REQUEST = 1,
+    OFPET_BAD_ACTION = 2,
+    OFPET_BAD_INSTRUCTION = 3,
+    OFPET_BAD_MATCH = 4,
+    OFPET_FLOW_MOD_FAILED = 5,
+    OFPET_GROUP_MOD_FAILED = 6,
+    OFPET_PORT_MOD_FAILED = 7,
+    OFPET_TABLE_MOD_FAILED = 8,
+    OFPET_QUEUE_OP_FAILED = 9,
+    OFPET_SWITCH_CONFIG_FAILED = 10,
+    OFPET_ROLE_REQUEST_FAILED = 11,
+    OFPET_METER_MOD_FAILED = 12,
+    OFPET_TABLE_FEATURES_FAILED = 13,
+    OFPET_BAD_PROPERTY = 14,
+    OFPET_ASYNC_CONFIG_FAILED = 15,
+    OFPET_FLOW_MONITOR_FAILED = 16,
+    OFPET_BUNDLE_FAILED = 17,
+    OFPET_EXPERIMENTER = 0xffff,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_HELLO_FAILED */
+enum ofp_hello_failed_code(wire_type=uint16_t) {
+    OFPHFC_INCOMPATIBLE = 0,
+    OFPHFC_EPERM = 1,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_BAD_REQUEST. */
+enum ofp_bad_request_code(wire_type=uint16_t) {
+    OFPBRC_BAD_VERSION = 0,
+    OFPBRC_BAD_TYPE = 1,
+    OFPBRC_BAD_STAT = 2,
+    OFPBRC_BAD_EXPERIMENTER = 3,
+    OFPBRC_BAD_EXPERIMENTER_TYPE = 4,
+    OFPBRC_EPERM = 5,
+    OFPBRC_BAD_LEN = 6,
+    OFPBRC_BUFFER_EMPTY = 7,
+    OFPBRC_BUFFER_UNKNOWN = 8,
+    OFPBRC_BAD_TABLE_ID = 9,
+    OFPBRC_IS_SLAVE = 10,
+    OFPBRC_BAD_PORT = 11,
+    OFPBRC_BAD_PACKET = 12,
+    OFPBRC_MULTIPART_BUFFER_OVERFLOW = 13,
+    OFPBRC_MULTIPART_REQUEST_TIMEOUT = 14,
+    OFPBRC_MULTIPART_REPLY_TIMEOUT = 15,
+    OFPBRC_MULTIPART_BAD_SCHED = 16,
+    OFPBRC_PIPELINE_FIELDS_ONLY = 17,
+    OFPBRC_UNKNOWN = 18,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_BAD_ACTION. */
+enum ofp_bad_action_code(wire_type=uint16_t) {
+    OFPBAC_BAD_TYPE = 0,
+    OFPBAC_BAD_LEN = 1,
+    OFPBAC_BAD_EXPERIMENTER = 2,
+    OFPBAC_BAD_EXPERIMENTER_TYPE = 3,
+    OFPBAC_BAD_OUT_PORT = 4,
+    OFPBAC_BAD_ARGUMENT = 5,
+    OFPBAC_EPERM = 6,
+    OFPBAC_TOO_MANY = 7,
+    OFPBAC_BAD_QUEUE = 8,
+    OFPBAC_BAD_OUT_GROUP = 9,
+    OFPBAC_MATCH_INCONSISTENT = 10,
+    OFPBAC_UNSUPPORTED_ORDER = 11,
+    OFPBAC_BAD_TAG = 12,
+    OFPBAC_BAD_SET_TYPE = 13,
+    OFPBAC_BAD_SET_LEN = 14,
+    OFPBAC_BAD_SET_ARGUMENT = 15,
+    OFPBAC_BAD_SET_MASK = 16,
+    OFPBAC_BAD_METER = 17,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_BAD_INSTRUCTION. */
+enum ofp_bad_instruction_code(wire_type=uint16_t) {
+    OFPBIC_UNKNOWN_INST = 0,
+    OFPBIC_UNSUP_INST = 1,
+    OFPBIC_BAD_TABLE_ID = 2,
+    OFPBIC_UNSUP_METADATA = 3,
+    OFPBIC_UNSUP_METADATA_MASK = 4,
+    OFPBIC_BAD_EXPERIMENTER = 5,
+    OFPBIC_BAD_EXPERIMENTER_TYPE = 6,
+    OFPBIC_BAD_LEN = 7,
+    OFPBIC_EPERM = 8,
+    OFPBIC_DUP_INST = 9,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_BAD_MATCH. */
+enum ofp_bad_match_code(wire_type=uint16_t) {
+    OFPBMC_BAD_TYPE = 0,
+    OFPBMC_BAD_LEN = 1,
+    OFPBMC_BAD_TAG = 2,
+    OFPBMC_BAD_DL_ADDR_MASK = 3,
+    OFPBMC_BAD_NW_ADDR_MASK = 4,
+    OFPBMC_BAD_WILDCARDS = 5,
+    OFPBMC_BAD_FIELD = 6,
+    OFPBMC_BAD_VALUE = 7,
+    OFPBMC_BAD_MASK = 8,
+    OFPBMC_BAD_PREREQ = 9,
+    OFPBMC_DUP_FIELD = 10,
+    OFPBMC_EPERM = 11,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_FLOW_MOD_FAILED. */
+enum ofp_flow_mod_failed_code(wire_type=uint16_t) {
+    OFPFMFC_UNKNOWN = 0,
+    OFPFMFC_TABLE_FULL = 1,
+    OFPFMFC_BAD_TABLE_ID = 2,
+    OFPFMFC_OVERLAP = 3,
+    OFPFMFC_EPERM = 4,
+    OFPFMFC_BAD_TIMEOUT = 5,
+    OFPFMFC_BAD_COMMAND = 6,
+    OFPFMFC_BAD_FLAGS = 7,
+    OFPFMFC_CANT_SYNC = 8,
+    OFPFMFC_BAD_PRIORITY = 9,
+    OFPFMFC_IS_SYNC = 10,
+};
+
+/* ’flags’ bits in struct of_flow_monitor_request. */
+enum ofp_flow_monitor_flags (wire_type=uint16_t, bitmask=True){
+    OFPFMF_INITIAL = 0x1,
+    OFPFMF_ADD = 0x2,
+    OFPFMF_REMOVED = 0x4,
+    OFPFMF_MODIFY = 0x8,
+    OFPFMF_INSTRUCTIONS = 0x10,
+    OFPFMF_NO_ABBREV = 0x20,
+    OFPFMF_ONLY_OWN = 0x40,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_GROUP_MOD_FAILED. */
+enum ofp_group_mod_failed_code(wire_type=uint16_t) {
+    OFPGMFC_GROUP_EXISTS = 0,
+    OFPGMFC_INVALID_GROUP = 1,
+    OFPGMFC_WEIGHT_UNSUPPORTED = 2,
+    OFPGMFC_OUT_OF_GROUPS = 3,
+    OFPGMFC_OUT_OF_BUCKETS = 4,
+    OFPGMFC_CHAINING_UNSUPPORTED = 5,
+    OFPGMFC_WATCH_UNSUPPORTED = 6,
+    OFPGMFC_LOOP = 7,
+    OFPGMFC_UNKNOWN_GROUP = 8,
+    OFPGMFC_CHAINED_GROUP = 9,
+    OFPGMFC_BAD_TYPE = 10,
+    OFPGMFC_BAD_COMMAND = 11,
+    OFPGMFC_BAD_BUCKET = 12,
+    OFPGMFC_BAD_WATCH = 13,
+    OFPGMFC_EPERM = 14,
+    OFPGMFC_UNKNOWN_BUCKET = 15,
+    OFPGMFC_BUCKET_EXISTS = 16,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_PORT_MOD_FAILED. */
+enum ofp_port_mod_failed_code(wire_type=uint16_t) {
+    OFPPMFC_BAD_PORT = 0,
+    OFPPMFC_BAD_HW_ADDR = 1,
+    OFPPMFC_BAD_CONFIG = 2,
+    OFPPMFC_BAD_ADVERTISE = 3,
+    OFPPMFC_EPERM = 4,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_TABLE_MOD_FAILED. */
+enum ofp_table_mod_failed_code(wire_type=uint16_t) {
+    OFPTMFC_BAD_TABLE = 0,
+    OFPTMFC_BAD_CONFIG = 1,
+    OFPTMFC_EPERM = 2,
+};
+
+/* ofp_error msg ’code’ values for OFPET_QUEUE_OP_FAILED */
+enum ofp_queue_op_failed_code(wire_type=uint16_t) {
+    OFPQOFC_BAD_PORT = 0,
+    OFPQOFC_BAD_QUEUE = 1,
+    OFPQOFC_EPERM = 2,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_SWITCH_CONFIG_FAILED */
+enum ofp_switch_config_failed_code(wire_type=uint16_t) {
+    OFPSCFC_BAD_FLAGS = 0,
+    OFPSCFC_BAD_LEN = 1,
+    OFPSCFC_EPERM = 2,
+    OFPRRFC_ID_UNSUP = 3,
+    OFPRRFC_ID_IN_USE = 4,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_ROLE_REQUEST_FAILED. */
+enum ofp_role_request_failed_code(wire_type=uint16_t){
+    OFPRRFC_STALE = 0,
+    OFPRRFC_UNSUP = 1,
+    OFPRRFC_BAD_ROLE = 2,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_METER_MOD_FAILED */
+enum ofp_meter_mod_failed_code(wire_type=uint16_t) {
+    OFPMMFC_UNKNOWN = 0,
+    OFPMMFC_METER_EXISTS = 1,
+    OFPMMFC_INVALID_METER = 2,
+    OFPMMFC_UNKNOWN_METER = 3,
+    OFPMMFC_BAD_COMMAND = 4,
+    OFPMMFC_BAD_FLAGS = 5,
+    OFPMMFC_BAD_RATE = 6,
+    OFPMMFC_BAD_BURST = 7,
+    OFPMMFC_BAD_BAND = 8,
+    OFPMMFC_BAD_BAND_VALUE = 9,
+    OFPMMFC_OUT_OF_METERS = 10,
+    OFPMMFC_OUT_OF_BANDS = 11,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_TABLE_FEATURES_FAILED */
+enum ofp_table_features_failed_code(wire_type=uint16_t) {
+    OFPTFFC_BAD_TABLE = 0,
+    OFPTFFC_BAD_METADATA = 1,
+    OFPTFFC_EPERM = 5,
+    OFPTFFC_BAD_CAPA = 6,
+    OFPTFFC_BAD_MAX_ENT = 7,
+    OFPTFFC_BAD_FEATURES = 8,
+    OFPTFFC_BAD_COMMAND = 9,
+    OFPTFFC_TOO_MANY = 10,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_BAD_PROPERTY. */
+enum ofp_bad_property_code(wire_type=uint16_t) {
+    OFPBPC_BAD_TYPE = 0,
+    OFPBPC_BAD_LEN = 1,
+    OFPBPC_BAD_VALUE = 2,
+    OFPBPC_TOO_MANY = 3,
+    OFPBPC_DUP_TYPE = 4,
+    OFPBPC_BAD_EXPERIMENTER = 5,
+    OFPBPC_BAD_EXP_TYPE = 6,
+    OFPBPC_BAD_EXP_VALUE = 7,
+    OFPBPC_EPERM = 8,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_ASYNC_CONFIG_FAILED. */
+enum ofp_async_config_failed_code(wire_type=uint16_t) {
+    OFPACFC_INVALID = 0,
+    OFPACFC_UNSUPPORTED = 1,
+    OFPACFC_EPERM = 2,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_FLOW_MONITOR_FAILED. */
+enum ofp_flow_monitor_failed_code(wire_type=uint16_t) {
+    OFPMOFC_UNKNOWN = 0,
+    OFPMOFC_MONITOR_EXISTS = 1,
+    OFPMOFC_INVALID_MONITOR = 2,
+    OFPMOFC_UNKNOWN_MONITOR = 3,
+    OFPMOFC_BAD_COMMAND = 4,
+    OFPMOFC_BAD_FLAGS = 5,
+    OFPMOFC_BAD_TABLE_ID = 6,
+    OFPMOFC_BAD_OUT = 7,
+};
+
+/* ofp_error_msg ’code’ values for OFPET_BUNDLE_FAILED. */
+enum ofp_bundle_failed_code(wire_type=uint16_t) {
+    OFPBFC_UNKNOWN = 0,
+    OFPBFC_EPERM = 1,
+    OFPBFC_BAD_ID = 2,
+    OFPBFC_BUNDLE_EXIST = 3,
+    OFPBFC_BUNDLE_CLOSED = 4,
+    OFPBFC_OUT_OF_BUNDLES = 5,
+    OFPBFC_BAD_TYPE = 6,
+    OFPBFC_BAD_FLAGS = 7,
+    OFPBFC_MSG_BAD_LEN = 8,
+    OFPBFC_MSG_BAD_XID = 9,
+    OFPBFC_MSG_UNSUP = 10,
+    OFPBFC_MSG_CONFLICT = 11,
+    OFPBFC_MSG_TOO_MANY = 12,
+    OFPBFC_MSG_FAILED = 13,
+    OFPBFC_TIMEOUT = 14,
+    OFPBFC_BUNDLE_IN_PROGRESS = 15,
+    OFPBFC_SCHED_NOT_SUPPORTED = 16,
+    OFPBFC_SCHED_FUTURE = 17,
+    OFPBFC_SCHED_PAST = 18,
+};
+
+enum ofp_bundle_feature_flags(wire_type=uint32_t, bitmask=True) {
+    OFPBF_TIMESTAMP = 0x1,
+    OFPBF_TIME_SET_SCHED = 0x2,
+};
+
+/* Configure/Modify behavior of a flow table */
+struct of_table_mod : of_header {
+    uint8_t version;
+    uint8_t type == 17;
+    uint16_t length;
+    uint32_t xid;
+    uint8_t table_id;
+    pad(3);
+    uint32_t config;
+    list(of_table_mod_prop_t) properties;
+};
+
+/* Common header for all Table Mod Properties */
+struct of_table_mod_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Eviction table mod Property. Mostly used in OFPMP_TABLE_DESC replies. */
+struct of_table_mod_prop_eviction : of_table_mod_prop {
+    uint16_t type == 2;
+    uint16_t length;
+    enum ofp_table_mod_prop_eviction_flag flags;
+};
+
+/* Vacancy table mod property */
+struct of_table_mod_prop_vacancy : of_table_mod_prop {
+    uint16_t type == 3;
+    uint16_t length;
+    uint8_t vacancy_down;
+    uint8_t vacancy_up;
+    uint8_t vacancy;
+    pad(1);
+};
+
+/* Experimenter table mod property */
+struct of_table_mod_prop_experimenter : of_table_mod_prop {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* Flow setup and teardown (controller -> datapath). */
+struct of_flow_mod : of_header {
+    uint8_t version;
+    uint8_t type == 14;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command == ?;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    enum ofp_flow_mod_flags flags;
+    uint16_t importance;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+/* Group setup and teardown (controller -> datapath). */
+struct of_group_mod : of_header {
+    uint8_t version;
+    uint8_t type == 15;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_group_mod_command command == ?;
+    enum ofp_group_type group_type;
+    pad(1);
+    uint32_t group_id;
+    uint16_t bucket_array_len == length(buckets);
+    pad(2);
+    enum ofp_group_bucket command_bucket_id;
+    list(of_bucket_t) buckets;
+    list(of_group_prop_t) properties;
+};
+
+/* Bucket for use in groups. */
+struct of_bucket {
+    uint16_t len;
+    uint16_t action_array_len == length(actions);
+    enum ofp_group_bucket bucket_id;
+    list(of_action_t) actions;
+    list(of_group_bucket_prop_t) properties;
+};
+
+/* Common header for all group bucket properties. */
+struct of_group_bucket_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Group bucket weight property, for select groups only. */
+struct of_group_bucket_prop_weight : of_group_bucket_prop {
+    uint16_t type == 0;
+    uint16_t length;
+    uint16_t weight;
+    pad(2);
+};
+
+/* Group bucket watch port */
+struct of_group_bucket_prop_watch_port : of_group_bucket_prop {
+    uint16_t type == 1;
+    uint16_t length;
+    uint32_t watch;
+};
+
+/* Group bucket watch group */
+struct of_group_bucket_prop_watch_group : of_group_bucket_prop{
+    uint16_t type == 2;
+    uint16_t length;
+    uint32_t watch;
+};
+
+/* Experimenter group bucket property */
+struct of_group_bucket_prop_experimenter : of_group_bucket_prop {
+    uint16_t type == 3;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* Common header for all group properties. */
+struct of_group_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Experimenter group property */
+struct of_group_prop_experimenter {
+    uint16_t type == 65535;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* Modify behavior of the physical port */
+struct of_port_mod : of_header {
+    uint8_t version;
+    uint8_t type == 16;
+    uint16_t length;
+    uint32_t xid;
+    of_port_no_t port_no;
+    pad(4);
+    of_mac_addr_t hw_addr;
+    pad(2);
+    enum ofp_port_config config;
+    enum ofp_port_config mask;
+    list(of_port_mod_prop_t) properties;
+};
+
+/* Common header for all port mod properties. */
+struct of_port_mod_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Ethernet port mod property. */
+struct of_port_mod_prop_ethernet : of_port_mod_prop {
+    uint16_t type == 0;
+    uint16_t length;
+    enum ofp_port_features advertise;
+};
+
+/* Optical port mod property */
+struct of_port_mod_prop_optical : of_port_mod_prop {
+    uint16_t type == 1;
+    uint16_t length;
+    uint32_t configure;
+    uint32_t freq_ldma;
+    uint32_t fl_offset; /* TODO signed */
+    uint32_t grid_span;
+    uint32_t tx_pwr;
+};
+
+/* Experimenter port mod property. */
+struct of_port_mod_prop_experimenter : of_port_mod_prop {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* Meter configuration. OFPT_METER_MOD. */
+struct of_meter_mod : of_header {
+    uint8_t version;
+    uint8_t type == 29;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_meter_mod_command command;
+    enum ofp_meter_flags flags;
+    uint32_t meter_id;
+    list(of_meter_band_t) bands;
+};
+
+/* Common header for all meter bands */
+struct of_meter_band {
+    uint16_t type == ?;
+    uint16_t len;
+//  uint32_t rate;  // These are excluded b/c this is the header
+//  uint32_t burst_size;  // These are excluded b/c this is the header
+};
+
+/* OFPMBT_DROP band - drop packets */
+struct of_meter_band_drop : of_meter_band {
+    uint16_t type == 1;
+    uint16_t len;
+    uint32_t rate;
+    uint32_t burst_size;
+    pad(4);
+};
+
+/* OFPMBT_DSCP_REMARK band - Remark DSCP in the IP header */
+struct of_meter_band_dscp_remark : of_meter_band {
+    uint16_t type == 2;
+    uint16_t len;
+    uint32_t rate;
+    uint32_t burst_size;
+    uint8_t prec_level;
+    pad(3);
+};
+
+/* OFPMBT_EXPERIMENTER band - Experimenter type.
+* The rest of the band is experimenter-defined. */
+struct of_meter_band_experimenter : of_meter_band {
+    uint16_t type == 65535;
+    uint16_t len;
+    uint32_t rate;
+    uint32_t burst_size;
+    uint32_t experimenter;
+};
+
+/* Multipart Request */
+struct of_stats_request : of_header {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == ?;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+};
+
+/* Multipart Reply */
+struct of_stats_reply : of_header {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == ?;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+};
+
+/* Body for ofp_multipart_request of type OFPST_FLOW(_DESC) */
+struct of_flow_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 1;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint8_t table_id;
+    pad(3);
+    of_port_no_t out_port;
+    uint32_t out_group;
+    pad(4);
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    of_match_t match;
+};
+
+/* Body for ofp_multipart_reply of type OFPST_FLOW(_DESC) */
+struct of_flow_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 1;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_flow_stats_entry_t) entries;
+};
+
+/* Body for ofp_multipart_request of type OFPMP_FLOW_(STATS)LIGHTWEIGHT */
+struct of_flow_lightweight_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 17;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint8_t table_id;
+    pad(3);
+    of_port_no_t out_port;
+    uint32_t out_group;
+    pad(4);
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    of_match_t match;
+};
+
+/* Entry for OFPST_FLOW */
+struct of_flow_stats_entry {
+    uint16_t length;
+    pad(2);
+    uint8_t table_id;
+    pad(1);
+    uint16_t priority;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    enum ofp_flow_mod_flags flags;
+    uint16_t importance;
+    uint64_t cookie;
+    of_match_t match;
+    of_stat_t stats;
+    list(of_instruction_t) instructions;
+};
+
+/* Entry for OFPMP_FLOW_(STATS)LIGHTWEIGHT */
+struct of_flow_lightweight_stats_entry {
+    uint16_t length;
+    pad(2);
+    uint8_t table_id;
+    enum ofp_flow_stats_reason reason;
+    uint16_t priority;
+    of_match_t match;
+    of_stat_t stats;
+};
+
+/* Body of reply to OFPST_FLOW_(STATS)LIGHTWEIGHT request */
+struct of_flow_lightweight_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 17;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_flow_lightweight_stats_entry_t) entries;
+};
+
+/* Body for ofp_multipart_request of type OFPMP_AGGREGATE_STATS. */
+struct of_aggregate_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 2;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint8_t table_id;
+    pad(3);
+    of_port_no_t out_port;
+    uint32_t out_group;
+    pad(4);
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    of_match_t match;
+};
+
+/* Body of reply to OFPMP_AGGREGATE_STATS request. */
+struct of_aggregate_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 2;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    of_stat_t stats;
+};
+
+
+/* Body for ofp_multipart_request of types OFPMP_PORT_STATS */
+struct of_port_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 4;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    of_port_no_t port_no;
+    pad(4);
+};
+
+struct of_port_stats_entry {
+    uint16_t length;
+    pad(2);
+    of_port_no_t port_no;
+    uint32_t duration_sec;
+    uint32_t duration_nsec;
+    uint64_t rx_packets;
+    uint64_t tx_packets;
+    uint64_t rx_bytes;
+    uint64_t tx_bytes;
+    uint64_t rx_dropped;
+    uint64_t tx_dropped;
+    uint64_t rx_errors;
+    uint64_t tx_errors;
+    list(of_port_stats_prop_t) properties;
+};
+
+/* Body of reply to OFPMP_PORT_STATS request. */
+struct of_port_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 4;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_port_stats_entry_t) entries;
+};
+
+/* Common header for all port stats properties. */
+struct of_port_stats_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Ethernet port stats property. */
+struct of_port_stats_prop_ethernet : of_port_stats_prop {
+    uint16_t type == 0;
+    uint16_t length;
+    pad(4);
+    uint64_t rx_frame_err;
+    uint64_t rx_over_err;
+    uint64_t rx_crc_err;
+    uint64_t collisions;
+};
+
+/* Optical port stats property. */
+struct of_port_stats_prop_optical : of_port_stats_prop {
+    uint16_t type == 1;
+    uint16_t length;
+    pad(4);
+    uint32_t flags;
+    uint32_t tx_freq_lmda;
+    uint32_t tx_offset;
+    uint32_t tx_grid_span;
+    uint32_t rx_freq_lmda;
+    uint32_t rx_offset;
+    uint32_t rx_grid_span;
+    uint16_t tx_pwr;
+    uint16_t rx_pwr;
+    uint16_t bias_current;
+    uint16_t temperature;
+};
+
+/* Experimenter port stats property. */
+struct of_port_stats_prop_experimenter : of_port_stats_prop {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* Body for ofp_multipart_request of OFPMP_PORT_DESC. */
+struct of_port_desc_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 13;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    of_port_no_t port_no;
+    pad(4);
+};
+
+/* Body for ofp_multipart_reply of OFPMP_PORT_DESC. */
+struct of_port_desc_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 13;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_port_desc_t) entries;
+};
+
+/* Body for ofp_multipart_request of OFPMP_QUEUE_STATS. */
+struct of_queue_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 5;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    of_port_no_t port_no;
+    uint32_t queue_id;
+};
+
+struct of_queue_stats_entry {
+    uint16_t length;
+    pad(6);
+    of_port_no_t port_no;
+    uint32_t queue_id;
+    uint64_t tx_bytes;
+    uint64_t tx_packets;
+    uint64_t tx_errors;
+    uint32_t duration_sec;
+    uint32_t duration_nsec;
+    list(of_queue_stats_prop_t) properties;
+};
+
+struct of_queue_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 5;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_queue_stats_entry_t) entries;
+};
+
+/* Common header for all queue properties */
+struct of_queue_stats_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Experimenter queue property description. */
+struct of_queue_stats_prop_experimenter : of_queue_stats_prop {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* Body for ofp_multipart_request of OFPMP_QUEUE_DESC */
+struct of_queue_desc_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 15;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    of_port_no_t port_no;
+    uint32_t queue_id;
+};
+
+struct of_queue_desc {
+    uint32_t port_no;
+    uint32_t queue_id;
+    uint16_t length;
+    pad(6);
+    list(of_queue_desc_prop_t) properties;
+};
+
+/* Body of reply to OFPMP_QUEUE_DESC request. */
+struct of_queue_desc_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 15;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_queue_desc_t) entries;
+};
+
+/* Common header for all queue properties */
+struct of_queue_desc_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Min-Rate queue property description. */
+struct of_queue_desc_prop_min_rate : of_queue_desc_prop {
+    uint16_t type == 1;
+    uint16_t length;
+    uint16_t rate;
+    pad(2);
+};
+
+/* Max-Rate queue property description. */
+struct of_queue_desc_prop_max_rate : of_queue_desc_prop {
+    uint16_t type == 2;
+    uint16_t length;
+    uint16_t rate;
+    pad(2);
+};
+
+/* Experimenter queue property description. */
+struct of_queue_desc_prop_experimenter : of_queue_desc_prop {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* Body of OFPMP_GROUP_STATS */
+struct of_group_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 6;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint32_t group_id;
+    pad(4);
+};
+
+struct of_group_stats_entry {
+    uint16_t length;
+    pad(2);
+    uint32_t group_id;
+    uint32_t ref_count;
+    pad(4);
+    uint64_t packet_count;
+    uint64_t byte_count;
+    uint32_t duration_sec;
+    uint32_t duration_nsec;
+    list(of_bucket_counter_t) bucket_stats;
+};
+
+/* Body of reply to OFPMP_GROUP_STATS request. */
+struct of_group_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 6;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_group_stats_entry_t) entries;
+};
+
+/* Used in group stats replies. */
+struct of_bucket_counter {
+    uint64_t packet_count;
+    uint64_t byte_count;
+};
+
+/* Body of OFPMP_GROUP_DESC requests. */
+struct of_group_desc_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 7;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint32_t group_id;
+    pad(4);
+};
+
+struct of_group_desc_stats_entry {
+    uint16_t length;
+    enum ofp_group_type group_type;
+    pad(1);
+    uint32_t group_id;
+    uint16_t bucket_array_len == length(buckets);
+    pad(6);
+    list(of_bucket_t) buckets;
+    list(of_group_prop_t) properties;
+};
+
+/* Body of reply to OFPMP_GROUP_DESC request. */
+struct of_group_desc_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 7;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_group_desc_stats_entry_t) entries;
+};
+
+/* Body of OFPMP_GROUP_FEATURES request. Group features. */
+struct of_group_features_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 8;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+};
+
+/* Body of reply to OFPMP_GROUP_FEATURES request. Group features. */
+struct of_group_features_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 8;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    uint32_t types;
+    enum ofp_group_capabilities capabilities;
+    uint32_t max_groups_all;
+    uint32_t max_groups_select;
+    uint32_t max_groups_indirect;
+    uint32_t max_groups_ff;
+    uint32_t actions_all;
+    uint32_t actions_select;
+    uint32_t actions_indirect;
+    uint32_t actions_ff;
+};
+
+/* Body of OFPMP_METER_STATS request */
+struct of_meter_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 9;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint32_t meter_id;
+    pad(4);
+};
+
+struct of_meter_stats {
+    uint32_t meter_id;
+    uint16_t len;
+    pad(6);
+    uint32_t ref_count;
+    uint64_t packet_in_count;
+    uint64_t byte_in_count;
+    uint32_t duration_sec;
+    uint32_t duration_nsec;
+    list(of_meter_band_stats_t) band_stats;
+};
+
+/* Body of reply to OFPMP_METER_STATS request */
+struct of_meter_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 9;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_meter_stats_t) entries;
+};
+
+/* Statistics for each meter band */
+struct of_meter_band_stats {
+    uint64_t packet_band_count;
+    uint64_t byte_band_count;
+};
+
+/* Body of OFPMP_METER_DESC request */
+struct of_meter_config_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 10;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint32_t meter_id;
+    pad(4);
+};
+
+struct of_meter_config {
+    uint16_t length;
+    enum ofp_meter_flags flags;
+    uint32_t meter_id;
+    list(of_meter_band_t) entries;
+};
+
+/* Body of reply to OFPMP_METER_DESC request */
+struct of_meter_config_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 10;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_meter_config_t) entries;
+};
+
+
+/* Body of OFPMP_METER_FEATURES request. */
+struct of_meter_features_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 11;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+};
+
+struct of_meter_features {
+    uint32_t    max_meter;
+    uint32_t    band_types;
+    uint32_t    capabilities;
+    uint8_t     max_bands;
+    uint8_t     max_color;
+    pad(2);
+    uint32_t features;
+    pad(4);
+};
+
+/* Body of reply to OFPMP_METER_FEATURES request. Meter features. */
+struct of_meter_features_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 11;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    of_meter_features_t features;
+
+};
+
+/* Body of OFPMP_TABLE_STATS request. */
+struct of_table_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 3;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+};
+
+struct of_table_stats_entry {
+    uint8_t table_id;
+    pad(3);
+    uint32_t active_count;
+    uint64_t lookup_count;
+    uint64_t matched_count;
+};
+
+/* Body of reply to OFPMP_TABLE_STATS request. */
+struct of_table_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 3;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_table_stats_entry_t) entries;
+};
+
+/* Flow monitor commands */
+enum ofp_flow_monitor_command(wire_type=uint8_t) {
+    OFPFMC_ADD = 0,
+    OFPFMC_MODIFY = 1,
+    OFPFMC_DELETE = 2,
+};
+
+struct of_flow_monitor_entry {
+    uint32_t monitor_id;
+    uint32_t out_port;
+    uint32_t out_group;
+    enum ofp_flow_monitor_flags flags;
+    uint8_t table_id;
+    enum ofp_flow_monitor_command command;
+    of_match_t match;
+};
+
+/* Body of OFPMP_FLOW_MONITOR request */
+struct of_flow_monitor_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 16;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    list(of_flow_monitor_entry_t) entries;
+};
+
+enum ofp_flow_update_event(wire_type=uint16_t) {
+    OFPFME_INITIAL = 0,
+    OFPFME_ADDED = 1,
+    OFPFME_REMOVED = 2,
+    OFPFME_MODIFIED = 3,
+    OFPFME_ABBREV = 4,
+    OFPFME_PAUSED = 5,
+    OFPFME_RESUMED = 6,
+};
+
+struct of_flow_monitor_reply_entry {
+    uint16_t length;
+    enum ofp_flow_update_event event;
+};
+
+/* Body of OFPMP_FLOW_MONITOR reply */
+struct of_flow_monitor_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 16;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_flow_monitor_reply_entry_t) entries;
+};
+
+/* Body of OFPMP_TABLE_DESC request. */
+struct of_table_desc_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 14;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+};
+
+/* Body of reply to OFPMP_TABLE_DESC request. */
+struct of_table_desc_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 14;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_table_desc_t) entries;
+};
+
+
+/* Body of OFPMP_TABLE_FEATURES request. */
+struct of_table_features_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 12;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    list(of_table_features_t) entries;
+};
+
+struct of_table_features {
+    uint16_t length;
+    uint8_t table_id;
+    enum ofp_table_features_command command;
+    enum ofp_table_feature_flag features;
+    of_table_name_t name;
+    uint64_t metadata_match;
+    uint64_t metadata_write;
+    enum ofp_table_config capabilities;
+    uint32_t max_entries;
+    list(of_table_feature_prop_t) properties;
+};
+
+/* Body of reply to OFPMP_TABLE_FEATURES request. */
+struct of_table_features_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 12;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_table_features_t) entries;
+};
+
+/* Common header for all Table Feature Properties */
+struct of_table_feature_prop {
+    uint16_t         type == ?;
+    uint16_t         length;
+};
+
+/* Instructions property */
+struct of_table_feature_prop_instructions : of_table_feature_prop {
+    uint16_t         type == 0;
+    uint16_t         length;
+    // FIXME Check if instruction_t is right for ids here
+    list(of_instruction_id_t)   instruction_ids;
+};
+
+/* Instruction Miss property */
+struct of_table_feature_prop_instructions_miss : of_table_feature_prop {
+    uint16_t         type == 1;
+    uint16_t         length;
+    list(of_instruction_id_t)   instruction_ids;
+};
+
+/* Instruction ID */
+struct of_instruction_id {
+    uint16_t type;
+    uint16_t len;
+    of_octets_t exp_data;
+};
+
+/* OFPTFPT_TABLE_SYNC_FROM property */
+struct of_table_feature_prop_table_sync_from : of_table_feature_prop {
+    uint16_t         type == 16;
+    uint16_t         length;
+    list(of_uint8_t) table_ids;
+};
+
+/* OFPTFPT_NEXT_TABLES property */
+struct of_table_feature_prop_next_tables : of_table_feature_prop {
+    uint16_t         type == 2;
+    uint16_t         length;
+    list(of_uint8_t) next_table_ids;
+};
+
+/* NEXT_TABLES_MISS property */
+struct of_table_feature_prop_next_tables_miss : of_table_feature_prop {
+    uint16_t         type == 3;
+    uint16_t         length;
+    list(of_uint8_t) next_table_ids;
+};
+
+/* OFPTFPT_WRITE_ACTIONS property */
+struct of_table_feature_prop_write_actions : of_table_feature_prop {
+    uint16_t         type == 4;
+    uint16_t         length;
+    list(of_action_id_t) action_ids;
+};
+
+/* FPTFPT_WRITE_ACTIONS_MISS property */
+struct of_table_feature_prop_write_actions_miss : of_table_feature_prop {
+    uint16_t         type == 5;
+    uint16_t         length;
+    list(of_action_id_t) action_ids;
+};
+
+/* OFPTFPT_APPLY_ACTIONS property */
+struct of_table_feature_prop_apply_actions : of_table_feature_prop {
+    uint16_t         type == 6;
+    uint16_t         length;
+    list(of_action_id_t) action_ids;
+};
+
+/* OFPTFPT_APPLY_ACTIONS_MISS property */
+struct of_table_feature_prop_apply_actions_miss : of_table_feature_prop {
+    uint16_t         type == 7;
+    uint16_t         length;
+    list(of_action_id_t) action_ids;
+};
+
+/* Action ID */
+struct of_action_id {
+    uint16_t type;
+    uint16_t len;
+    of_octets_t exp_data;
+};
+
+/* OFPTFPT_MATCH property */
+struct of_table_feature_prop_match : of_table_feature_prop {
+    uint16_t         type == 8;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_WILDCARDS property */
+struct of_table_feature_prop_wildcards : of_table_feature_prop {
+    uint16_t         type == 10;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_WRITE_SETFIELD property */
+struct of_table_feature_prop_write_setfield : of_table_feature_prop {
+    uint16_t         type == 12;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_WRITE_SETFIELD_MISS property */
+struct of_table_feature_prop_write_setfield_miss : of_table_feature_prop {
+    uint16_t         type == 13;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_APPLY_SETFIELD property */
+struct of_table_feature_prop_apply_setfield : of_table_feature_prop {
+    uint16_t         type == 14;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_APPLY_SETFIELD_MISS property */
+struct of_table_feature_prop_apply_setfield_miss : of_table_feature_prop {
+    uint16_t         type == 15;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_WRITE_COPYFIELD property */
+struct of_table_feature_prop_write_copyfield : of_table_feature_prop {
+    uint16_t         type == 18;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_WRITE_COPYFIELD_MISS property */
+struct of_table_feature_prop_write_copyfield_miss : of_table_feature_prop {
+    uint16_t         type == 19;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_APPLY_COPYFIELD property */
+struct of_table_feature_prop_apply_copyfield : of_table_feature_prop {
+    uint16_t         type == 20;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_APPLY_COPYFIELD_MISS property */
+struct of_table_feature_prop_apply_copyfield_miss : of_table_feature_prop {
+    uint16_t         type == 21;
+    uint16_t         length;
+    list(of_uint32_t) oxm_ids;
+};
+
+/* OFPTFPT_PACKET_TYPES property */
+struct of_table_feature_prop_oxm_values {
+    uint16_t type == 22;
+    uint16_t length;
+    of_octets_t oxm_values;
+};
+
+/* OFPTFPT_EXPERIMENTER property */
+struct of_table_feature_prop_experimenter : of_table_feature_prop {
+    uint16_t         type == 65534;
+    uint16_t         length;
+    uint32_t         experimenter == ?;
+    uint32_t         subtype;
+};
+
+/* OFPTFPT_EXPERIMENTER_MISS property */
+struct of_table_feature_prop_experimenter_miss : of_table_feature_prop {
+    uint16_t         type == 65535;
+    uint16_t         length;
+    uint32_t         experimenter == ?;
+    uint32_t         subtype;
+};
+
+/*
+ * Not supporting the flow monitor multipart messages. This message is
+ * poorly designed because it includes a variable length match inside a
+ * struct (ofp_flow_monitor_request) with no explicit length member.
+ * I'm not writing the special case code to figure out the total length.
+ */
+
+
+ /* Send packet (controller -> datapath). */
+ struct of_packet_out : of_header {
+    uint8_t version;
+    uint8_t type == 13;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t buffer_id;
+    uint16_t actions_len == length(actions);
+    pad(2);
+    of_match_t match;
+    list(of_action_t) actions;
+    of_octets_t data;
+};
+
+/* Barrier message request */
+struct of_barrier_request : of_header {
+    uint8_t version;
+    uint8_t type == 20;
+    uint16_t length;
+    uint32_t xid;
+};
+
+/* Barrier message request */
+struct of_barrier_reply : of_header {
+    uint8_t version;
+    uint8_t type == 21;
+    uint16_t length;
+    uint32_t xid;
+};
+
+/* Role request */
+struct of_role_request : of_header {
+    uint8_t version;
+    uint8_t type == 24;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_controller_role role;
+    uint16_t short_id;
+    pad(2);
+    uint64_t generation_id;
+};
+
+/* Role reply */
+struct of_role_reply : of_header {
+    uint8_t version;
+    uint8_t type == 25;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_controller_role role;
+    uint16_t short_id;
+    pad(2);
+    uint64_t generation_id;
+};
+
+/* Bundle control message */
+struct of_bundle_ctrl_msg : of_header {
+    uint8_t version;
+    uint8_t type == 33;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t bundle_id;
+    enum ofp_bundle_ctrl_type bundle_ctrl_type;
+    enum ofp_bundle_flags flags;
+    list(of_bundle_prop_t) properties;
+};
+
+/* Bundle add message */
+struct of_bundle_add_msg : of_header {
+    uint8_t version;
+    uint8_t type == 34;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t bundle_id;
+    pad(1);
+    enum ofp_bundle_flags flags;
+    of_header_t message;
+    list(of_bundle_prop_t) properties;
+};
+
+/* Bundle property types. */
+struct of_bundle_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Bundle time property. */
+struct of_bundle_prop_time : of_bundle_prop {
+    uint16_t type == 1;
+    uint16_t length;
+    pad(4);
+    list(of_time_t) scheduled_time;
+};
+
+/* Experimenter bundle property */
+struct of_bundle_prop_experimenter : of_bundle_prop {
+    uint16_t type == 65535;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* Time Format. */
+struct of_time {
+    uint64_t seconds;
+    uint32_t nanoseconds;
+    pad(4);
+};
+
+/* Common header for all async config Properties */
+struct of_async_config_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* OFPACPT_PACKET_IN_SLAVE property */
+struct of_async_config_prop_packet_in_slave : of_async_config_prop {
+    uint16_t type == 0;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_PACKET_IN_MASTER property */
+struct of_async_config_prop_packet_in_master : of_async_config_prop {
+    uint16_t type == 1;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_PORT_STATUS_SLAVE property */
+struct of_async_config_prop_port_status_slave : of_async_config_prop {
+    uint16_t type == 2;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_PORT_STATUS_MASTER property */
+struct of_async_config_prop_port_status_master : of_async_config_prop {
+    uint16_t type == 3;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_FLOW_REMOVED_SLAVE property */
+struct of_async_config_prop_flow_removed_slave : of_async_config_prop {
+    uint16_t type == 4;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_FLOW_REMOVED_MASTER property */
+struct of_async_config_prop_flow_removed_master : of_async_config_prop {
+    uint16_t type == 5;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_ROLE_STATUS_SLAVE property */
+struct of_async_config_prop_role_status_slave : of_async_config_prop {
+    uint16_t type == 6;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_ROLE_STATUS_MASTER property */
+struct of_async_config_prop_role_status_master : of_async_config_prop {
+    uint16_t type == 7;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_TABLE_STATUS_SLAVE property */
+struct of_async_config_prop_table_status_slave : of_async_config_prop {
+    uint16_t type == 8;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_TABLE_STATUS_MASTER property */
+struct of_async_config_prop_table_status_master : of_async_config_prop {
+    uint16_t type == 9;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_REQUESTFORWARD_SLAVE property */
+struct of_async_config_prop_requestforward_slave : of_async_config_prop {
+    uint16_t type == 10;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_REQUESTFORWARD_MASTER property */
+struct of_async_config_prop_requestforward_master : of_async_config_prop {
+    uint16_t type == 11;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_FLOW_STATS_SLAVE property */
+struct of_async_config_prop_flow_stats_slave : of_async_config_prop {
+    uint16_t type == 12;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_FLOW_STATS_MASTER property */
+struct of_async_config_prop_flow_stats_master : of_async_config_prop {
+    uint16_t type == 13;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_CONT_STATUS_SLAVE property */
+struct of_async_config_prop_cont_status_slave : of_async_config_prop {
+    uint16_t type == 14;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPACPT_CONT_STATUS_MASTER property */
+struct of_async_config_prop_cont_status_master : of_async_config_prop {
+    uint16_t type == 15;
+    uint16_t length;
+    uint32_t mask;
+};
+
+/* OFPTFPT_EXPERIMENTER_SLAVE property */
+struct of_async_config_prop_experimenter_slave : of_async_config_prop {
+    uint16_t type == 0xfffe;
+    uint16_t length;
+    //uint32_t experimenter == ?;
+    //uint32_t exp_type;
+};
+
+/* OFPTFPT_EXPERIMENTER_MASTER property */
+struct of_async_config_prop_experimenter_master : of_async_config_prop {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    //uint32_t experimenter == ?;
+    //uint32_t exp_type;
+};
+
+/* Packet received on port (datapath -> controller). */
+struct of_packet_in : of_header {
+    uint8_t version;
+    uint8_t type == 10;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t buffer_id;
+    uint16_t total_len;
+    uint8_t reason;
+    uint8_t table_id;
+    uint64_t cookie;
+    of_match_t match;
+    pad(2);
+    of_octets_t data;
+};
+
+/* Flow removed (datapath -> controller). */
+struct of_flow_removed : of_header {
+    uint8_t version;
+    uint8_t type == 11;
+    uint16_t length;
+    uint32_t xid;
+    uint8_t table_id;
+    enum ofp_flow_removed_reason reason;
+    uint16_t priority;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint64_t cookie;
+    of_match_t match;
+    of_stat_t stats;
+};
+
+/* A physical port has changed in the datapath */
+struct of_port_status : of_header {
+    uint8_t version;
+    uint8_t type == 12;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_port_reason reason;
+    pad(7);
+    of_port_desc_t desc;
+};
+
+/* Role status event message. */
+struct of_role_status : of_header {
+    uint8_t version;
+    uint8_t type == 30;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_controller_role role;
+    enum ofp_controller_role_reason reason;
+    pad(3);
+    uint64_t generation_id;
+    list(of_role_prop_t) properties;
+};
+
+/* Common header for all Role Properties */
+struct of_role_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Experimenter role property */
+struct of_role_prop_experimenter : of_role_prop {
+    uint16_t type == 0xffff;
+    uint16_t length;
+    uint32_t experimenter == ?;
+    uint32_t exp_type;
+};
+
+/* Table descriotion */
+struct of_table_desc {
+    uint16_t length;
+    uint8_t table_id;
+    pad(1);
+    enum ofp_table_config config;
+    list(of_table_mod_prop_t) properties;
+};
+
+
+/* A table config has changed in the datapath */
+struct of_table_status : of_header {
+    uint8_t version;
+    uint8_t type == 31;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_table_reason reason;
+    pad(7);
+    of_table_desc_t table;
+};
+
+/* Group/Meter request forwarding. */
+struct of_requestforward : of_header {
+    uint8_t version;
+    uint8_t type == 32;
+    uint16_t length;
+    uint32_t xid;
+    of_header_t request;
+};
+
+/* OFPT_HELLO. This message includes zero or more hello elements having
+* variable size. Unknown elements types must be ignored/skipped, to allow
+* for future extensions. */
+struct of_hello : of_header {
+    uint8_t version;
+    uint8_t type == 0;
+    uint16_t length;
+    uint32_t xid;
+    list(of_hello_elem_t) elements;
+};
+
+/* Common header for all Hello Elements */
+struct of_hello_elem {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Version bitmap Hello Element */
+struct of_hello_elem_versionbitmap : of_hello_elem {
+    uint16_t type == 1;
+    uint16_t length;
+    list(of_uint32_t) bitmaps;
+};
+
+/* ECHO REQUEST */
+struct of_echo_request : of_header {
+    uint8_t version;
+    uint8_t type == 2;
+    uint16_t length;
+    uint32_t xid;
+    of_octets_t data;
+};
+
+/* ECHO REPLY */
+struct of_echo_reply : of_header {
+    uint8_t version;
+    uint8_t type == 3;
+    uint16_t length;
+    uint32_t xid;
+    of_octets_t data;
+};
+
+/* OFPT_ERROR: Error message. */
+struct of_error_msg : of_header {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == ?;
+};
+
+/* Experimenter extension message. */
+struct of_experimenter : of_header {
+    uint8_t version;
+    uint8_t type == 4;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t experimenter == ?;
+    uint32_t subtype;
+    of_octets_t data;
+};
+
+/* Features Request */
+struct of_features_request : of_header {
+    uint8_t version;
+    uint8_t type == 5;
+    uint16_t length;
+    uint32_t xid;
+};
+
+/* Features Reply  (ofp_switch_features) */
+struct of_features_reply : of_header {
+    uint8_t version;
+    uint8_t type == 6;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t datapath_id;
+    uint32_t n_buffers;
+    uint8_t n_tables;
+    uint8_t auxiliary_id;
+    pad(2);
+    enum ofp_capabilities capabilities;
+    uint32_t reserved;
+};
+
+/* Get Configuration Message */
+struct of_get_config_request : of_header {
+    uint8_t version;
+    uint8_t type == 7;
+    uint16_t length;
+    uint32_t xid;
+};
+
+/* Get Configuration Reply (ofp_switch_config) */
+struct of_get_config_reply : of_header {
+    uint8_t version;
+    uint8_t type == 8;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_config_flags flags;
+    uint16_t miss_send_len;
+};
+
+/* Set Configuration Message */
+struct of_set_config : of_header {
+    uint8_t version;
+    uint8_t type == 9;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_config_flags flags;
+    uint16_t miss_send_len;
+};
+
+/* Flow Add Message */
+struct of_flow_add : of_flow_mod {
+    uint8_t version;
+    uint8_t type == 14;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command == 0;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    enum ofp_flow_mod_flags flags;
+    uint16_t importance;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+/* Flow Modify Message */
+struct of_flow_modify : of_flow_mod {
+    uint8_t version;
+    uint8_t type == 14;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command == 1;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    enum ofp_flow_mod_flags flags;
+    uint16_t importance;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+/* Flow Modify Strict Message */
+struct of_flow_modify_strict : of_flow_mod {
+    uint8_t version;
+    uint8_t type == 14;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command == 2;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    enum ofp_flow_mod_flags flags;
+    uint16_t importance;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+/* Flow Delete Message */
+struct of_flow_delete : of_flow_mod {
+    uint8_t version;
+    uint8_t type == 14;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command == 3;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    enum ofp_flow_mod_flags flags;
+    uint16_t importance;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+/* Flow Delete Strict Message */
+struct of_flow_delete_strict : of_flow_mod {
+    uint8_t version;
+    uint8_t type == 14;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command == 4;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    enum ofp_flow_mod_flags flags;
+    uint16_t importance;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+/* Group Add message */
+struct of_group_add : of_group_mod {
+    uint8_t version;
+    uint8_t type == 15;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_group_mod_command command == 0;
+    enum ofp_group_type group_type;
+    pad(1);
+    uint32_t group_id;
+    uint16_t bucket_array_len == length(buckets);
+    pad(2);
+    enum ofp_group_bucket command_bucket_id;
+    list(of_bucket_t) buckets;
+    list(of_group_prop_t) properties;
+};
+
+/* Group Modify Message */
+struct of_group_modify : of_group_mod {
+    uint8_t version;
+    uint8_t type == 15;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_group_mod_command command == 1;
+    enum ofp_group_type group_type;
+    pad(1);
+    uint32_t group_id;
+    uint16_t bucket_array_len == length(buckets);
+    pad(2);
+    enum ofp_group_bucket command_bucket_id;
+    list(of_bucket_t) buckets;
+    list(of_group_prop_t) properties;
+};
+
+/* Group Delete Message */
+struct of_group_delete : of_group_mod {
+    uint8_t version;
+    uint8_t type == 15;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_group_mod_command command == 2;
+    enum ofp_group_type group_type;
+    pad(1);
+    uint32_t group_id;
+    uint16_t bucket_array_len == length(buckets);
+    pad(2);
+    enum ofp_group_bucket command_bucket_id;
+    list(of_bucket_t) buckets;
+    list(of_group_prop_t) properties;
+};
+
+/* Group Insert Bucket Message */
+struct of_group_insert_bucket : of_group_mod {
+    uint8_t version;
+    uint8_t type == 15;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_group_mod_command command == 3;
+    enum ofp_group_type group_type;
+    pad(1);
+    uint32_t group_id;
+    uint16_t bucket_array_len == length(buckets);
+    pad(2);
+    enum ofp_group_bucket command_bucket_id;
+    list(of_bucket_t) buckets;
+    list(of_group_prop_t) properties;
+};
+
+/* Group Remove Bucket Message */
+struct of_group_remove_bucket : of_group_mod {
+    uint8_t version;
+    uint8_t type == 15;
+    uint16_t length;
+    uint32_t xid;
+    enum ofp_group_mod_command command == 5;
+    enum ofp_group_type group_type;
+    pad(1);
+    uint32_t group_id;
+    uint16_t bucket_array_len == length(buckets);
+    pad(2);
+    enum ofp_group_bucket command_bucket_id;
+    list(of_bucket_t) buckets;
+    list(of_group_prop_t) properties;
+};
+
+/* Hello Failed Error Message */
+struct of_hello_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 0;
+    enum ofp_hello_failed_code code;
+    of_octets_t data;
+};
+
+/* Bad Request Error Message */
+struct of_bad_request_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 1;
+    enum ofp_bad_request_code code;
+    of_octets_t data;
+};
+
+/* Bad Action Error Message */
+struct of_bad_action_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 2;
+    enum ofp_bad_action_code code;
+    of_octets_t data;
+};
+
+/* Bad Instruction Error Message */
+struct of_bad_instruction_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 3;
+    enum ofp_bad_instruction_code code;
+    of_octets_t data;
+};
+
+/* Bad Match Error Message */
+struct of_bad_match_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 4;
+    enum ofp_bad_match_code code;
+    of_octets_t data;
+};
+
+/* Flow Mod Failed Error Message */
+struct of_flow_mod_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 5;
+    enum ofp_flow_mod_failed_code code;
+    of_octets_t data;
+};
+
+/* Group Mod Failed Error Message */
+struct of_group_mod_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 6;
+    enum ofp_group_mod_failed_code code;
+    of_octets_t data;
+};
+
+/* Port Mod Failed Error Message */
+struct of_port_mod_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 7;
+    enum ofp_port_mod_failed_code code;
+    of_octets_t data;
+};
+
+/* Table Mod Failed Error Message */
+struct of_table_mod_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 8;
+    enum ofp_table_mod_failed_code code;
+    of_octets_t data;
+};
+
+/* Queue Op Failed Error Message */
+struct of_queue_op_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 9;
+    enum ofp_queue_op_failed_code code;
+    of_octets_t data;
+};
+
+/* Switch Config Failed Error Message */
+struct of_switch_config_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 10;
+    enum ofp_switch_config_failed_code code;
+    of_octets_t data;
+};
+
+/* Role Request Failed Error Message */
+struct of_role_request_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 11;
+    enum ofp_role_request_failed_code code;
+    of_octets_t data;
+};
+
+/* Meter Mod Failed Error Message */
+struct of_meter_mod_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 12;
+    enum ofp_meter_mod_failed_code code;
+    of_octets_t data;
+};
+
+/* Table Features Failed Error Message */
+struct of_table_features_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 13;
+    enum ofp_table_features_failed_code code;
+    of_octets_t data;
+};
+
+/* Bad Property Error Message */
+struct of_bad_property_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 14;
+    enum ofp_bad_property_code code;
+    of_octets_t data;
+};
+
+/* Async Config Failed Error Message */
+struct of_async_config_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 15;
+    enum ofp_async_config_failed_code code;
+    of_octets_t data;
+};
+
+/* Flow Monitor Failed Error Message */
+struct of_flow_monitor_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 16;
+    enum ofp_flow_monitor_failed_code code;
+    of_octets_t data;
+};
+
+/* Bundle Failed Error Message */
+struct of_bundle_failed_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 17;
+    enum ofp_bundle_failed_code code;
+    of_octets_t data;
+};
+
+/* Experimenter Error Message */
+struct of_experimenter_error_msg : of_error_msg {
+    uint8_t version;
+    uint8_t type == 1;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type == 0xffff;
+    uint16_t subtype;
+    uint32_t experimenter == ?;
+    of_octets_t data;
+};
+
+/* Get Async Request Message */
+struct of_async_get_request : of_header {
+    uint8_t version;
+    uint8_t type == 26;
+    uint16_t length;
+    uint32_t xid;
+    list(of_async_config_prop_t) properties;
+};
+
+/* Get Async Reply Message */
+struct of_async_get_reply : of_header {
+    uint8_t version;
+    uint8_t type == 27;
+    uint16_t length;
+    uint32_t xid;
+    list(of_async_config_prop_t) properties;
+};
+
+/* Set Async Message */
+struct of_async_set : of_header {
+    uint8_t version;
+    uint8_t type == 28;
+    uint16_t length;
+    uint32_t xid;
+    list(of_async_config_prop_t) properties;
+};
+
+/* description statistic request */
+struct of_desc_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+};
+
+/* description statistic reply (ofp_desc) */
+struct of_desc_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    of_desc_str_t mfr_desc;
+    of_desc_str_t hw_desc;
+    of_desc_str_t sw_desc;
+    of_serial_num_t serial_num;
+    of_desc_str_t dp_desc;
+};
+
+/* controller status statistic request */
+struct of_controller_status_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 18;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+};
+
+/*controller status statistic reply */
+struct of_controller_status_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 18;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    list(of_controller_status_entry_t) controller_status;
+};
+
+/* Bundle features properties header */
+struct of_bundle_features_prop {
+    uint16_t type == ?;
+    uint16_t length;
+};
+
+/* Bundle features statistic request */
+struct of_bundle_features_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 19;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    enum ofp_bundle_feature_flags feature_request_flags;
+    pad(4);
+    list(of_bundle_features_prop_t) properties;
+};
+
+/*Bundle features statistic reply */
+struct of_bundle_features_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 19;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    enum ofp_bundle_feature_flags capabilities;
+    pad(6);
+    list(of_bundle_features_prop_t) properties;
+};
+
+/* Bundle time features. */
+struct of_bundle_features_prop_time : of_bundle_features_prop{
+    uint16_t type == 1;
+    uint16_t length;
+    pad(4);
+    of_time_t sched_accuracy;
+    of_time_t sched_max_future;
+    of_time_t sched_max_past;
+    of_time_t timestamp;
+};
+
+/* Experimenter stats request */
+struct of_experimenter_stats_request : of_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0xffff;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint32_t experimenter == ?;
+    uint32_t subtype;
+};
+
+/* Experimenter stats reply */
+struct of_experimenter_stats_reply : of_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0xffff;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    uint32_t experimenter == ?;
+    uint32_t subtype;
+};
+
+/* ------------------------------------------- 1.3.1 Queue Structure -------------------------------------- */
+struct of_queue_prop {
+    uint16_t type == ?;
+    uint16_t len;
+    pad(4);
+};
+
+struct of_queue_prop_min_rate : of_queue_prop {
+    uint16_t type == 1;
+    uint16_t len;
+    pad(4);
+    uint16_t rate;
+    pad(6);
+};
+
+struct of_queue_prop_max_rate : of_queue_prop {
+    uint16_t type == 2;
+    uint16_t len;
+    pad(4);
+    uint16_t rate;
+    pad(6);
+};
+
+struct of_queue_prop_experimenter : of_queue_prop {
+    uint16_t type == 65535;
+    uint16_t len;
+    pad(4);
+    uint32_t experimenter == ?;
+    pad(4);
+    of_octets_t data;
+};
+
+struct of_packet_queue {
+    uint32_t queue_id;
+    of_port_no_t port;
+    uint16_t len;
+    pad(6);
+    list(of_queue_prop_t) properties;
+};
+
+
+
+