Module Frenetic_kernel.OpenFlow0x04

type 'a mask = {
m_value : 'a;
m_mask : 'a option;
}
include sig ... end
val mask_of_sexp : (Ppx_sexp_conv_lib.Sexp.t ‑> 'a) ‑> Ppx_sexp_conv_lib.Sexp.t ‑> 'a mask
val sexp_of_mask : ('a ‑> Ppx_sexp_conv_lib.Sexp.t) ‑> 'a mask ‑> Ppx_sexp_conv_lib.Sexp.t
type 'a asyncMask = {
m_master : 'a;
m_slave : 'a;
}
include sig ... end
val asyncMask_of_sexp : (Ppx_sexp_conv_lib.Sexp.t ‑> 'a) ‑> Ppx_sexp_conv_lib.Sexp.t ‑> 'a asyncMask
val sexp_of_asyncMask : ('a ‑> Ppx_sexp_conv_lib.Sexp.t) ‑> 'a asyncMask ‑> Ppx_sexp_conv_lib.Sexp.t
type payload =
| Buffered of int32 * Cstruct.t

(** Buffered (id, buf) is a packet buffered on a switch. *)

| NotBuffered of Cstruct.t
include sig ... end
val payload_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> payload
val sexp_of_payload : payload ‑> Ppx_sexp_conv_lib.Sexp.t
type xid = OpenFlow_Header.xid
include sig ... end
val xid_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> xid
val sexp_of_xid : xid ‑> Ppx_sexp_conv_lib.Sexp.t
type int12 = Packet.int16
include sig ... end
val int12_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> int12
val sexp_of_int12 : int12 ‑> Ppx_sexp_conv_lib.Sexp.t
type int24 = int32
include sig ... end
val int24_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> int24
val sexp_of_int24 : int24 ‑> Ppx_sexp_conv_lib.Sexp.t
type int128 = int64 * int64
include sig ... end
val int128_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> int128
val sexp_of_int128 : int128 ‑> Ppx_sexp_conv_lib.Sexp.t
val val_to_mask : 'a1 ‑> 'a1 mask
val ip_to_mask : (Packet.nwAddr * int32) ‑> Packet.nwAddr mask
type switchId = int64
include sig ... end
val switchId_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> switchId
val sexp_of_switchId : switchId ‑> Ppx_sexp_conv_lib.Sexp.t
type groupId = int32
include sig ... end
val groupId_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> groupId
val sexp_of_groupId : groupId ‑> Ppx_sexp_conv_lib.Sexp.t
type portId = int32
include sig ... end
val portId_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portId
val sexp_of_portId : portId ‑> Ppx_sexp_conv_lib.Sexp.t
type tableId = Packet.int8
include sig ... end
val tableId_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> tableId
val sexp_of_tableId : tableId ‑> Ppx_sexp_conv_lib.Sexp.t
type bufferId = int32
include sig ... end
val bufferId_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> bufferId
val sexp_of_bufferId : bufferId ‑> Ppx_sexp_conv_lib.Sexp.t
type switchFlags = {
frag_normal : bool;
frag_drop : bool;
frag_reasm : bool;
}
include sig ... end
val switchFlags_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> switchFlags
val sexp_of_switchFlags : switchFlags ‑> Ppx_sexp_conv_lib.Sexp.t
type switchConfig = {
flags : switchFlags;
miss_send_len : Packet.int16;
}
include sig ... end
val switchConfig_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> switchConfig
val sexp_of_switchConfig : switchConfig ‑> Ppx_sexp_conv_lib.Sexp.t
type helloFailed =
| HelloIncompatible
| HelloPermError
include sig ... end
val helloFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> helloFailed
val sexp_of_helloFailed : helloFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type badRequest =
| ReqBadVersion
| ReqBadType
| ReqBadMultipart
| ReqBadExp
| ReqBadExpType
| ReqPermError
| ReqBadLen
| ReqBufferEmpty
| ReqBufferUnknown
| ReqBadTableId
| ReqIsSlave
| ReqBadPort
| ReqBadPacket
| ReqMultipartBufOverflow
include sig ... end
val badRequest_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> badRequest
val sexp_of_badRequest : badRequest ‑> Ppx_sexp_conv_lib.Sexp.t
type badAction =
| ActBadType
| ActBadLen
| ActBadExp
| ActBadExpType
| ActBadOutPort
| ActBadArg
| ActPermError
| ActTooMany
| ActBadQueue
| ActBadOutGroup
| ActMatchInconsistent
| ActUnsupportedOrder
| ActBadTag
| ActBadSetTyp
| ActBadSetLen
| ActBadSetArg
include sig ... end
val badAction_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> badAction
val sexp_of_badAction : badAction ‑> Ppx_sexp_conv_lib.Sexp.t
type badInstruction =
| InstUnknownInst
| InstBadTableId
| InstUnsupInst
| InstUnsupMeta
| InstUnsupMetaMask
| InstBadExp
| InstBadExpTyp
| InstBadLen
| InstPermError
include sig ... end
val badInstruction_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> badInstruction
val sexp_of_badInstruction : badInstruction ‑> Ppx_sexp_conv_lib.Sexp.t
type badMatch =
| MatBadTyp
| MatBadLen
| MatBadTag
| MatBadDlAddrMask
| MatBadNwAddrMask
| MatBadWildcards
| MatBadField
| MatBadValue
| MatBadMask
| MatBadPrereq
| MatDupField
| MatPermError
include sig ... end
val badMatch_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> badMatch
val sexp_of_badMatch : badMatch ‑> Ppx_sexp_conv_lib.Sexp.t
type flowModFailed =
| FlUnknown
| FlTableFull
| FlBadTableId
| FlOverlap
| FlPermError
| FlBadTimeout
| FlBadCommand
| FlBadFlags
include sig ... end
val flowModFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> flowModFailed
val sexp_of_flowModFailed : flowModFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type groupModFailed =
| GrGroupExists
| GrInvalidGroup
| GrWeightUnsupported
| GrOutOfGroups
| GrOutOfBuckets
| GrChainingUnsupported
| GrWatchUnsupported
| GrLoop
| GrUnknownGroup
| GrChainedGroup
| GrBadTyp
| GrBadCommand
| GrBadBucket
| GrBadWatch
| GrPermError
include sig ... end
val groupModFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> groupModFailed
val sexp_of_groupModFailed : groupModFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type portModFailed =
| PoBadPort
| PoBadHwAddr
| PoBadConfig
| PoBadAdvertise
| PoPermError
include sig ... end
val portModFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portModFailed
val sexp_of_portModFailed : portModFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type tableModFailed =
| TaBadTable
| TaBadConfig
| TaPermError
include sig ... end
val tableModFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> tableModFailed
val sexp_of_tableModFailed : tableModFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type queueOpFailed =
| QuBadPort
| QuBadQueue
| QuPermError
include sig ... end
val queueOpFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> queueOpFailed
val sexp_of_queueOpFailed : queueOpFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type switchConfigFailed =
| ScBadFlags
| ScBadLen
| ScPermError
include sig ... end
val switchConfigFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> switchConfigFailed
val sexp_of_switchConfigFailed : switchConfigFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type roleReqFailed =
| RoStale
| RoUnsup
| RoBadRole
include sig ... end
val roleReqFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> roleReqFailed
val sexp_of_roleReqFailed : roleReqFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type meterModFailed =
| MeUnknown
| MeMeterExists
| MeInvalidMeter
| MeUnknownMeter
| MeBadCommand
| MeBadFlags
| MeBadRate
| MeBadBurst
| MeBadBand
| MeBadBandValue
| MeOutOfMeters
| MeOutOfBands
include sig ... end
val meterModFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterModFailed
val sexp_of_meterModFailed : meterModFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type tableFeatFailed =
| TfBadTable
| TfBadMeta
| TfBadType
| TfBadLen
| TfBadArg
| TfPermError
include sig ... end
val tableFeatFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> tableFeatFailed
val sexp_of_tableFeatFailed : tableFeatFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type experimenterFailed = {
exp_typ : Packet.int16;
exp_id : int32;
}
include sig ... end
val experimenterFailed_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> experimenterFailed
val sexp_of_experimenterFailed : experimenterFailed ‑> Ppx_sexp_conv_lib.Sexp.t
type errorTyp =
| HelloFailed of helloFailed
| BadRequest of badRequest
| BadAction of badAction
| BadInstruction of badInstruction
| BadMatch of badMatch
| FlowModFailed of flowModFailed
| GroupModFailed of groupModFailed
| PortModFailed of portModFailed
| TableModFailed of tableModFailed
| QueueOpFailed of queueOpFailed
| SwitchConfigFailed of switchConfigFailed
| RoleReqFailed of roleReqFailed
| MeterModFailed of meterModFailed
| TableFeatFailed of tableFeatFailed
| ExperimenterFailed of experimenterFailed
include sig ... end
val errorTyp_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> errorTyp
val sexp_of_errorTyp : errorTyp ‑> Ppx_sexp_conv_lib.Sexp.t
type length = Packet.int16
include sig ... end
val length_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> length
val sexp_of_length : length ‑> Ppx_sexp_conv_lib.Sexp.t
type oxmIPv6ExtHdr = {
noext : bool;
esp : bool;
auth : bool;
dest : bool;
frac : bool;
router : bool;
hop : bool;
unrep : bool;
unseq : bool;
}
include sig ... end
val oxmIPv6ExtHdr_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> oxmIPv6ExtHdr
val sexp_of_oxmIPv6ExtHdr : oxmIPv6ExtHdr ‑> Ppx_sexp_conv_lib.Sexp.t
type oxm =
| OxmInPort of portId
| OxmInPhyPort of portId
| OxmMetadata of int64 mask
| OxmEthType of Packet.int16
| OxmEthDst of Packet.int48 mask
| OxmEthSrc of Packet.int48 mask
| OxmVlanVId of int12 mask
| OxmVlanPcp of Packet.int8
| OxmIPProto of Packet.int8
| OxmIPDscp of Packet.int8
| OxmIPEcn of Packet.int8
| OxmIP4Src of int32 mask
| OxmIP4Dst of int32 mask
| OxmTCPSrc of Packet.int16
| OxmTCPDst of Packet.int16
| OxmARPOp of Packet.int16
| OxmARPSpa of int32 mask
| OxmARPTpa of int32 mask
| OxmARPSha of Packet.int48 mask
| OxmARPTha of Packet.int48 mask
| OxmICMPType of Packet.int8
| OxmICMPCode of Packet.int8
| OxmMPLSLabel of int32
| OxmMPLSTc of Packet.int8
| OxmTunnelId of int64 mask
| OxmUDPSrc of Packet.int16
| OxmUDPDst of Packet.int16
| OxmSCTPSrc of Packet.int16
| OxmSCTPDst of Packet.int16
| OxmIPv6Src of int128 mask
| OxmIPv6Dst of int128 mask
| OxmIPv6FLabel of int32 mask
| OxmICMPv6Type of Packet.int8
| OxmICMPv6Code of Packet.int8
| OxmIPv6NDTarget of int128 mask
| OxmIPv6NDSll of Packet.int48
| OxmIPv6NDTll of Packet.int48
| OxmMPLSBos of bool
| OxmPBBIsid of int24 mask
| OxmIPv6ExtHdr of oxmIPv6ExtHdr mask
include sig ... end
val oxm_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> oxm
val sexp_of_oxm : oxm ‑> Ppx_sexp_conv_lib.Sexp.t
type oxmMatch = oxm list
include sig ... end
val oxmMatch_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> oxmMatch
val sexp_of_oxmMatch : oxmMatch ‑> Ppx_sexp_conv_lib.Sexp.t

Convenient Functions

val parse_payload : payload ‑> Packet.packet
val marshal_payload : int32 option ‑> Packet.packet ‑> payload

marshal_payload buf pkt serializes pkt, where buf is an optional buffer ID.

val match_all : oxmMatch
type pseudoPort =
| PhysicalPort of portId
| InPort

(** Send the packet out the input port. This reserved port must be explicitly used in order to send back out of the input port. *)

| Table

(** Submit the packet to the first flow table NB: This destination port can only be used in packet-out messages. *)

| Normal

(** Process with normal L2/L3 switching. *)

| Flood

(** All physical ports in VLAN, except input port and those blocked or link down. *)

| AllPorts

(** All physical ports except input port. *)

| Controller of Packet.int16

(** Send to controller along with n (max 1024) bytes of the packet *)

| Local

(** Local openflow "port". *)

| Any

(** Wildcard port used only for flow mod (delete) and flow stats requests. Selects all flows regardless of output port (including flows with no output port). *)

A pseudo-port, as described by the ofp_port_no enumeration in Section A.2.1 of the OpenFlow 1.3.0 specification.

include sig ... end
val pseudoPort_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> pseudoPort
val sexp_of_pseudoPort : pseudoPort ‑> Ppx_sexp_conv_lib.Sexp.t
type actionHdr =
| OutputHdr
| GroupHdr
| PopVlanHdr
| PushVlanHdr
| PopMplsHdr
| PushMplsHdr
| SetFieldHdr
| CopyTtlOutHdr
| CopyTtlInHdr
| SetNwTtlHdr
| DecNwTtlHdr
| PushPbbHdr
| PopPbbHdr
| SetMplsTtlHdr
| DecMplsTtlHdr
| SetQueueHdr
| ExperimenterAHdr of int32
include sig ... end
val actionHdr_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> actionHdr
val sexp_of_actionHdr : actionHdr ‑> Ppx_sexp_conv_lib.Sexp.t
type action =
| Output of pseudoPort
| Group of groupId
| PopVlan
| PushVlan of Packet.int16
| PopMpls of Packet.int16
| PushMpls of Packet.int16
| SetField of oxm
| CopyTtlOut
| CopyTtlIn
| SetNwTtl of Packet.int8
| DecNwTtl
| PushPbb of Packet.int16
| PopPbb
| SetMplsTtl of Packet.int8
| DecMplsTtl
| SetQueue of int32
| Experimenter of int32
include sig ... end
val action_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> action
val sexp_of_action : action ‑> Ppx_sexp_conv_lib.Sexp.t
type actionSequence = action list
include sig ... end
val actionSequence_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> actionSequence
val sexp_of_actionSequence : actionSequence ‑> Ppx_sexp_conv_lib.Sexp.t
type instructionHdr =
| GotoTableHdr
| ApplyActionsHdr
| WriteActionsHdr
| WriteMetadataHdr
| ClearHdr
| MeterHdr
| ExperimenterHdr of int32
include sig ... end
val instructionHdr_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> instructionHdr
val sexp_of_instructionHdr : instructionHdr ‑> Ppx_sexp_conv_lib.Sexp.t
type instruction =
| GotoTable of tableId
| ApplyActions of actionSequence
| WriteActions of actionSequence
| WriteMetadata of int64 mask
| Clear
| Meter of int32
| Experimenter of int32
include sig ... end
val instruction_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> instruction
val sexp_of_instruction : instruction ‑> Ppx_sexp_conv_lib.Sexp.t
type bucket = {
bu_weight : Packet.int16;
bu_watch_port : portId option;
bu_watch_group : groupId option;
bu_actions : actionSequence;
}
include sig ... end
val bucket_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> bucket
val sexp_of_bucket : bucket ‑> Ppx_sexp_conv_lib.Sexp.t
type groupType =
| All
| Select
| Indirect
| FF
include sig ... end
val groupType_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> groupType
val sexp_of_groupType : groupType ‑> Ppx_sexp_conv_lib.Sexp.t
type groupMod =
| AddGroup of groupType * groupId * bucket list
| DeleteGroup of groupType * groupId
| ModifyGroup of groupType * groupId * bucket list
include sig ... end
val groupMod_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> groupMod
val sexp_of_groupMod : groupMod ‑> Ppx_sexp_conv_lib.Sexp.t
type timeout =
| Permanent
| ExpiresAfter of Packet.int16
include sig ... end
val timeout_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> timeout
val sexp_of_timeout : timeout ‑> Ppx_sexp_conv_lib.Sexp.t
type flowModCommand =
| AddFlow
| ModFlow
| ModStrictFlow
| DeleteFlow
| DeleteStrictFlow
include sig ... end
val flowModCommand_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> flowModCommand
val sexp_of_flowModCommand : flowModCommand ‑> Ppx_sexp_conv_lib.Sexp.t
type flowModFlags = {
fmf_send_flow_rem : bool;
fmf_check_overlap : bool;
fmf_reset_counts : bool;
fmf_no_pkt_counts : bool;
fmf_no_byt_counts : bool;
}
include sig ... end
val flowModFlags_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> flowModFlags
val sexp_of_flowModFlags : flowModFlags ‑> Ppx_sexp_conv_lib.Sexp.t
type flowMod = {
mfCookie : int64 mask;
mfTable_id : tableId;
mfCommand : flowModCommand;
mfIdle_timeout : timeout;
mfHard_timeout : timeout;
mfPriority : Packet.int16;
mfBuffer_id : bufferId option;
mfOut_port : pseudoPort option;
mfOut_group : groupId option;
mfFlags : flowModFlags;
mfOfp_match : oxmMatch;
mfInstructions : instruction list;
}
include sig ... end
val flowMod_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> flowMod
val sexp_of_flowMod : flowMod ‑> Ppx_sexp_conv_lib.Sexp.t
val add_flow : tbl:tableId ‑> prio:Packet.int16 ‑> pat:oxmMatch ‑> insts:instruction list ‑> flowMod
val delete_all_flows : flowMod
val delete_all_groups : groupMod
type packetInReason =
| NoMatch
| ExplicitSend
| InvalidTTL
include sig ... end
val packetInReason_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> packetInReason
val sexp_of_packetInReason : packetInReason ‑> Ppx_sexp_conv_lib.Sexp.t
type packetIn = {
pi_total_len : Packet.int16;
pi_reason : packetInReason;
pi_table_id : tableId;
pi_ofp_match : oxmMatch;
pi_payload : payload;
}
include sig ... end
val packetIn_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> packetIn
val sexp_of_packetIn : packetIn ‑> Ppx_sexp_conv_lib.Sexp.t
type flowReason =
| FlowIdleTimeout
| FlowHardTiemout
| FlowDelete
| FlowGroupDelete
include sig ... end
val flowReason_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> flowReason
val sexp_of_flowReason : flowReason ‑> Ppx_sexp_conv_lib.Sexp.t
type flowRemoved = {
cookie : int64;
priority : Packet.int16;
reason : flowReason;
table_id : tableId;
duration_sec : int32;
duration_nsec : int32;
idle_timeout : timeout;
hard_timeout : timeout;
packet_count : int64;
byte_count : int64;
oxm : oxmMatch;
}
include sig ... end
val flowRemoved_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> flowRemoved
val sexp_of_flowRemoved : flowRemoved ‑> Ppx_sexp_conv_lib.Sexp.t
type capabilities = {
flow_stats : bool;
table_stats : bool;
port_stats : bool;
group_stats : bool;
ip_reasm : bool;
queue_stats : bool;
port_blocked : bool;
}
include sig ... end
val capabilities_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> capabilities
val sexp_of_capabilities : capabilities ‑> Ppx_sexp_conv_lib.Sexp.t
type portState = {
blocked : bool;
live : bool;
}
include sig ... end
val portState_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portState
val sexp_of_portState : portState ‑> Ppx_sexp_conv_lib.Sexp.t
type portConfig = {
port_down : bool;
no_recv : bool;
no_fwd : bool;
no_packet_in : bool;
}
include sig ... end
val portConfig_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portConfig
val sexp_of_portConfig : portConfig ‑> Ppx_sexp_conv_lib.Sexp.t
type portFeatures = {
rate_10mb_hd : bool;
rate_10mb_fd : bool;
rate_100mb_hd : bool;
rate_100mb_fd : bool;
rate_1gb_hd : bool;
rate_1gb_fd : bool;
rate_10gb_fd : bool;
rate_40gb_fd : bool;
rate_100gb_fd : bool;
rate_1tb_fd : bool;
other : bool;
copper : bool;
fiber : bool;
autoneg : bool;
pause : bool;
pause_asym : bool;
}
include sig ... end
val portFeatures_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portFeatures
val sexp_of_portFeatures : portFeatures ‑> Ppx_sexp_conv_lib.Sexp.t
type portDesc = {
port_no : portId;
hw_addr : Packet.int48;
name : string;
config : portConfig;
state : portState;
curr : portFeatures;
advertised : portFeatures;
supported : portFeatures;
peer : portFeatures;
curr_speed : int32;
max_speed : int32;
}
include sig ... end
val portDesc_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portDesc
val sexp_of_portDesc : portDesc ‑> Ppx_sexp_conv_lib.Sexp.t
type portMod = {
mpPortNo : portId;
mpHw_addr : Packet.int48;
mpConfig : portConfig;
mpMask : int32;
mpAdvertise : portFeatures;
}
include sig ... end
val portMod_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portMod
val sexp_of_portMod : portMod ‑> Ppx_sexp_conv_lib.Sexp.t
type portReason =
| PortAdd
| PortDelete
| PortModify
include sig ... end
val portReason_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portReason
val sexp_of_portReason : portReason ‑> Ppx_sexp_conv_lib.Sexp.t
type portStatus = {
reason : portReason;
desc : portDesc;
}
include sig ... end
val portStatus_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portStatus
val sexp_of_portStatus : portStatus ‑> Ppx_sexp_conv_lib.Sexp.t
type packetOut = {
po_payload : payload;
po_port_id : portId option;
po_actions : actionSequence;
}
include sig ... end
val packetOut_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> packetOut
val sexp_of_packetOut : packetOut ‑> Ppx_sexp_conv_lib.Sexp.t
type rate = int32
include sig ... end
val rate_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> rate
val sexp_of_rate : rate ‑> Ppx_sexp_conv_lib.Sexp.t
type burst = int32
include sig ... end
val burst_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> burst
val sexp_of_burst : burst ‑> Ppx_sexp_conv_lib.Sexp.t
type experimenterId = int32
include sig ... end
val experimenterId_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> experimenterId
val sexp_of_experimenterId : experimenterId ‑> Ppx_sexp_conv_lib.Sexp.t
type meterBand =
| Drop of rate * burst
| DscpRemark of rate * burst * Packet.int8
| ExpMeter of rate * burst * experimenterId
include sig ... end
val meterBand_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterBand
val sexp_of_meterBand : meterBand ‑> Ppx_sexp_conv_lib.Sexp.t
type meterCommand =
| AddMeter
| ModifyMeter
| DeleteMeter
include sig ... end
val meterCommand_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterCommand
val sexp_of_meterCommand : meterCommand ‑> Ppx_sexp_conv_lib.Sexp.t
type meterFlags = {
kbps : bool;
pktps : bool;
burst : bool;
stats : bool;
}
include sig ... end
val meterFlags_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterFlags
val sexp_of_meterFlags : meterFlags ‑> Ppx_sexp_conv_lib.Sexp.t
type meterMod = {
command : meterCommand;
flags : meterFlags;
meter_id : int32;
bands : meterBand list;
}
include sig ... end
val meterMod_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterMod
val sexp_of_meterMod : meterMod ‑> Ppx_sexp_conv_lib.Sexp.t
type flowRequest = {
fr_table_id : tableId;
fr_out_port : portId;
fr_out_group : portId;
fr_match : oxmMatch;
}
include sig ... end
val flowRequest_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> flowRequest
val sexp_of_flowRequest : flowRequest ‑> Ppx_sexp_conv_lib.Sexp.t
type queueRequest = {
port_number : portId;
queue_id : int32;
}
include sig ... end
val queueRequest_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> queueRequest
val sexp_of_queueRequest : queueRequest ‑> Ppx_sexp_conv_lib.Sexp.t
type experimenter = {
exp_id : experimenterId;
exp_type : int32;
}
include sig ... end
val experimenter_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> experimenter
val sexp_of_experimenter : experimenter ‑> Ppx_sexp_conv_lib.Sexp.t
type tableFeatureProp =
| TfpInstruction of instructionHdr list
| TfpInstructionMiss of instructionHdr list
| TfpNextTable of tableId list
| TfpNextTableMiss of tableId list
| TfpWriteAction of actionHdr list
| TfpWriteActionMiss of actionHdr list
| TfpApplyAction of actionHdr list
| TfpApplyActionMiss of actionHdr list
| TfpMatch of oxm list
| TfpWildcard of oxm list
| TfpWriteSetField of oxm list
| TfpWriteSetFieldMiss of oxm list
| TfpApplySetField of oxm list
| TfpApplySetFieldMiss of oxm list
| TfpExperimenter of experimenter * Cstruct.t
| TfpExperimenterMiss of experimenter * Cstruct.t
include sig ... end
val tableFeatureProp_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> tableFeatureProp
val sexp_of_tableFeatureProp : tableFeatureProp ‑> Ppx_sexp_conv_lib.Sexp.t
type tableConfig =
| Deprecated
include sig ... end
val tableConfig_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> tableConfig
val sexp_of_tableConfig : tableConfig ‑> Ppx_sexp_conv_lib.Sexp.t
type tableFeatures = {
length : Packet.int16;
table_id : tableId;
name : string;
metadata_match : int64;
metadata_write : int64;
config : tableConfig;
max_entries : int32;
feature_prop : tableFeatureProp list;
}
include sig ... end
val tableFeatures_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> tableFeatures
val sexp_of_tableFeatures : tableFeatures ‑> Ppx_sexp_conv_lib.Sexp.t
type multipartType =
| SwitchDescReq
| PortsDescReq
| FlowStatsReq of flowRequest
| AggregFlowStatsReq of flowRequest
| TableStatsReq
| PortStatsReq of portId
| QueueStatsReq of queueRequest
| GroupStatsReq of int32
| GroupDescReq
| GroupFeatReq
| MeterStatsReq of int32
| MeterConfReq of int32
| MeterFeatReq
| TableFeatReq of tableFeatures list option
| ExperimentReq of experimenter
include sig ... end
val multipartType_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> multipartType
val sexp_of_multipartType : multipartType ‑> Ppx_sexp_conv_lib.Sexp.t
type multipartRequest = {
mpr_type : multipartType;
mpr_flags : bool;
}
include sig ... end
val multipartRequest_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> multipartRequest
val sexp_of_multipartRequest : multipartRequest ‑> Ppx_sexp_conv_lib.Sexp.t
val portDescReq : multipartRequest
type switchDesc = {
mfr_desc : string;
hw_desc : string;
sw_desc : string;
serial_num : string;
dp_desc : string;
}
include sig ... end
val switchDesc_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> switchDesc
val sexp_of_switchDesc : switchDesc ‑> Ppx_sexp_conv_lib.Sexp.t
type flowStats = {
table_id : tableId;
duration_sec : int32;
duration_nsec : int32;
priority : Packet.int16;
idle_timeout : timeout;
hard_timeout : timeout;
flags : flowModFlags;
cookie : int64;
packet_count : int64;
byte_count : int64;
ofp_match : oxmMatch;
instructions : instruction list;
}
include sig ... end
val flowStats_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> flowStats
val sexp_of_flowStats : flowStats ‑> Ppx_sexp_conv_lib.Sexp.t
type aggregStats = {
packet_count : int64;
byte_count : int64;
flow_count : int32;
}
include sig ... end
val aggregStats_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> aggregStats
val sexp_of_aggregStats : aggregStats ‑> Ppx_sexp_conv_lib.Sexp.t
type tableStats = {
table_id : tableId;
active_count : int32;
lookup_count : int64;
matched_count : int64;
}
include sig ... end
val tableStats_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> tableStats
val sexp_of_tableStats : tableStats ‑> Ppx_sexp_conv_lib.Sexp.t
type portStats = {
psPort_no : portId;
rx_packets : int64;
tx_packets : int64;
rx_bytes : int64;
tx_bytes : int64;
rx_dropped : int64;
tx_dropped : int64;
rx_errors : int64;
tx_errors : int64;
rx_frame_err : int64;
rx_over_err : int64;
rx_crc_err : int64;
collisions : int64;
duration_sec : int32;
duration_nsec : int32;
}
include sig ... end
val portStats_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portStats
val sexp_of_portStats : portStats ‑> Ppx_sexp_conv_lib.Sexp.t
type queueStats = {
qsPort_no : portId;
queue_id : int32;
tx_bytes : int64;
tx_packets : int64;
tx_errors : int64;
duration_sec : int32;
duration_nsec : int32;
}
include sig ... end
val queueStats_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> queueStats
val sexp_of_queueStats : queueStats ‑> Ppx_sexp_conv_lib.Sexp.t
type bucketStats = {
packet_count : int64;
byte_count : int64;
}
include sig ... end
val bucketStats_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> bucketStats
val sexp_of_bucketStats : bucketStats ‑> Ppx_sexp_conv_lib.Sexp.t
type groupStats = {
length : Packet.int16;
group_id : int32;
ref_count : int32;
packet_count : int64;
byte_count : int64;
duration_sec : int32;
duration_nsec : int32;
bucket_stats : bucketStats list;
}
include sig ... end
val groupStats_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> groupStats
val sexp_of_groupStats : groupStats ‑> Ppx_sexp_conv_lib.Sexp.t
type groupDesc = {
length : Packet.int16;
typ : groupType;
group_id : int32;
bucket : bucket list;
}
include sig ... end
val groupDesc_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> groupDesc
val sexp_of_groupDesc : groupDesc ‑> Ppx_sexp_conv_lib.Sexp.t
type groupCapabilities = {
select_weight : bool;
select_liveness : bool;
chaining : bool;
chaining_checks : bool;
}
include sig ... end
val groupCapabilities_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> groupCapabilities
val sexp_of_groupCapabilities : groupCapabilities ‑> Ppx_sexp_conv_lib.Sexp.t
type groupTypeMap = {
all : bool;
select : bool;
indirect : bool;
ff : bool;
}
include sig ... end
val groupTypeMap_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> groupTypeMap
val sexp_of_groupTypeMap : groupTypeMap ‑> Ppx_sexp_conv_lib.Sexp.t
type actionTypeMap = {
output : bool;
copy_ttl_out : bool;
copy_ttl_in : bool;
set_mpls_ttl : bool;
dec_mpls_ttl : bool;
push_vlan : bool;
pop_vlan : bool;
push_mpls : bool;
pop_mpls : bool;
set_queue : bool;
group : bool;
set_nw_ttl : bool;
dec_nw_ttl : bool;
set_field : bool;
push_pbb : bool;
pop_pbb : bool;
}
include sig ... end
val actionTypeMap_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> actionTypeMap
val sexp_of_actionTypeMap : actionTypeMap ‑> Ppx_sexp_conv_lib.Sexp.t
type groupFeatures = {
typ : groupTypeMap;
capabilities : groupCapabilities;
max_groups_all : int32;
max_groups_select : int32;
max_groups_indirect : int32;
max_groups_ff : int32;
actions_all : actionTypeMap;
actions_select : actionTypeMap;
actions_indirect : actionTypeMap;
actions_ff : actionTypeMap;
}
include sig ... end
val groupFeatures_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> groupFeatures
val sexp_of_groupFeatures : groupFeatures ‑> Ppx_sexp_conv_lib.Sexp.t
type meterBandStats = {
packet_band_count : int64;
byte_band_count : int64;
}
include sig ... end
val meterBandStats_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterBandStats
val sexp_of_meterBandStats : meterBandStats ‑> Ppx_sexp_conv_lib.Sexp.t
type meterStats = {
meter_id : int32;
len : Packet.int16;
flow_count : int32;
packet_in_count : int64;
byte_in_count : int64;
duration_sec : int32;
duration_nsec : int32;
band : meterBandStats list;
}
include sig ... end
val meterStats_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterStats
val sexp_of_meterStats : meterStats ‑> Ppx_sexp_conv_lib.Sexp.t
type meterConfig = {
length : length;
flags : meterFlags;
meter_id : int32;
bands : meterBand list;
}
include sig ... end
val meterConfig_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterConfig
val sexp_of_meterConfig : meterConfig ‑> Ppx_sexp_conv_lib.Sexp.t
type meterBandMaps = {
drop : bool;
dscpRemark : bool;
}
include sig ... end
val meterBandMaps_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterBandMaps
val sexp_of_meterBandMaps : meterBandMaps ‑> Ppx_sexp_conv_lib.Sexp.t
type meterFeatures = {
max_meter : int32;
band_typ : meterBandMaps;
capabilities : meterFlags;
max_band : Packet.int8;
max_color : Packet.int8;
}
include sig ... end
val meterFeatures_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> meterFeatures
val sexp_of_meterFeatures : meterFeatures ‑> Ppx_sexp_conv_lib.Sexp.t
type multipartReplyTyp =
| PortsDescReply of portDesc list
| SwitchDescReply of switchDesc
| FlowStatsReply of flowStats list
| AggregateReply of aggregStats
| TableReply of tableStats list
| TableFeaturesReply of tableFeatures list
| PortStatsReply of portStats list
| QueueStatsReply of queueStats list
| GroupStatsReply of groupStats list
| GroupDescReply of groupDesc list
| GroupFeaturesReply of groupFeatures
| MeterReply of meterStats list
| MeterConfig of meterConfig list
| MeterFeaturesReply of meterFeatures
include sig ... end
val multipartReplyTyp_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> multipartReplyTyp
val sexp_of_multipartReplyTyp : multipartReplyTyp ‑> Ppx_sexp_conv_lib.Sexp.t
type multipartReply = {
mpreply_typ : multipartReplyTyp;
mpreply_flags : bool;
}
include sig ... end
val multipartReply_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> multipartReply
val sexp_of_multipartReply : multipartReply ‑> Ppx_sexp_conv_lib.Sexp.t
type tableMod = {
table_id : tableId;
config : tableConfig;
}
include sig ... end
val tableMod_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> tableMod
val sexp_of_tableMod : tableMod ‑> Ppx_sexp_conv_lib.Sexp.t
type rateQueue =
| Rate of int
| Disabled
include sig ... end
val rateQueue_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> rateQueue
val sexp_of_rateQueue : rateQueue ‑> Ppx_sexp_conv_lib.Sexp.t
type queueProp =
| MinRateProp of rateQueue
| MaxRateProp of rateQueue
| ExperimenterProp of int32
include sig ... end
val queueProp_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> queueProp
val sexp_of_queueProp : queueProp ‑> Ppx_sexp_conv_lib.Sexp.t
type queueDesc = {
queue_id : int32;
port : portId;
len : Packet.int16;
properties : queueProp list;
}
include sig ... end
val queueDesc_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> queueDesc
val sexp_of_queueDesc : queueDesc ‑> Ppx_sexp_conv_lib.Sexp.t
type queueConfReq = {
port : portId;
}
include sig ... end
val queueConfReq_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> queueConfReq
val sexp_of_queueConfReq : queueConfReq ‑> Ppx_sexp_conv_lib.Sexp.t
type queueConfReply = {
port : portId;
queues : queueDesc list;
}
include sig ... end
val queueConfReply_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> queueConfReply
val sexp_of_queueConfReply : queueConfReply ‑> Ppx_sexp_conv_lib.Sexp.t
type controllerRole =
| NoChangeRole
| EqualRole
| MasterRole
| SlaveRole
include sig ... end
val controllerRole_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> controllerRole
val sexp_of_controllerRole : controllerRole ‑> Ppx_sexp_conv_lib.Sexp.t
type roleRequest = {
role : controllerRole;
generation_id : int64;
}
include sig ... end
val roleRequest_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> roleRequest
val sexp_of_roleRequest : roleRequest ‑> Ppx_sexp_conv_lib.Sexp.t
type supportedList = int list
include sig ... end
val supportedList_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> supportedList
val sexp_of_supportedList : supportedList ‑> Ppx_sexp_conv_lib.Sexp.t
type element =
| VersionBitMap of supportedList
include sig ... end
val element_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> element
val sexp_of_element : element ‑> Ppx_sexp_conv_lib.Sexp.t
type helloElement = element list
include sig ... end
val helloElement_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> helloElement
val sexp_of_helloElement : helloElement ‑> Ppx_sexp_conv_lib.Sexp.t
type packetInReasonMap = {
table_miss : bool;
apply_action : bool;
invalid_ttl : bool;
}
include sig ... end
val packetInReasonMap_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> packetInReasonMap
val sexp_of_packetInReasonMap : packetInReasonMap ‑> Ppx_sexp_conv_lib.Sexp.t
type portReasonMap = {
add : bool;
delete : bool;
modify : bool;
}
include sig ... end
val portReasonMap_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> portReasonMap
val sexp_of_portReasonMap : portReasonMap ‑> Ppx_sexp_conv_lib.Sexp.t
type flowReasonMask = {
idle_timeout : bool;
hard_timeout : bool;
delete : bool;
group_delete : bool;
}
include sig ... end
val flowReasonMask_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> flowReasonMask
val sexp_of_flowReasonMask : flowReasonMask ‑> Ppx_sexp_conv_lib.Sexp.t
type asyncConfig = {
packet_in : packetInReasonMap asyncMask;
port_status : portReasonMap asyncMask;
flow_removed : flowReasonMask asyncMask;
}
include sig ... end
val asyncConfig_of_sexp : Ppx_sexp_conv_lib.Sexp.t ‑> asyncConfig
val sexp_of_asyncConfig : asyncConfig ‑> Ppx_sexp_conv_lib.Sexp.t
type msg_code =
| HELLO
| ERROR
| ECHO_REQ
| ECHO_RESP
| VENDOR
| FEATURES_REQ
| FEATURES_RESP
| GET_CONFIG_REQ
| GET_CONFIG_RESP
| SET_CONFIG
| PACKET_IN
| FLOW_REMOVED
| PORT_STATUS
| PACKET_OUT
| FLOW_MOD
| GROUP_MOD
| PORT_MOD
| TABLE_MOD
| MULTIPART_REQ
| MULTIPART_RESP
| BARRIER_REQ
| BARRIER_RESP
| QUEUE_GET_CONFIG_REQ
| QUEUE_GET_CONFIG_RESP
| ROLE_REQ
| ROLE_RESP
| GET_ASYNC_REQ
| GET_ASYNC_REP
| SET_ASYNC
| METER_MOD
val msg_code_to_int : msg_code ‑> int
module PortConfig : sig ... end

See the ofp_port_config enumeration in section 7.2.1 of the OpenFlow 1.3.4 specification

module PortFeatures : sig ... end

See the ofp_port_features enumeration in section 7.2.1 of the OpenFlow 1.3.4 specification

module Oxm : sig ... end

Flow Match Fields structure. See the section 7.2.3.2 of the OpenFlow 1.3.4 specification

module PseudoPort : sig ... end
module QueueDesc : sig ... end

Queue Description structure. See the section 7.2.2 of the OpenFlow 1.3.4 specification

module SwitchConfig : sig ... end

Switch Configuration structure. See the section 7.3.2 of the OpenFlow 1.3.4 specification

module OfpMatch : sig ... end

Flow Match structure. See the section 7.2.3.1 of the OpenFlow 1.3.4 specification

module Action : sig ... end

Action structure. See the section 7.2.5 of the OpenFlow 1.3.4 specification

module Bucket : sig ... end

Bucket structure for use in groups. See the section 7.3.4.2 of OpenFlow 1.3.4 specification

module FlowModCommand : sig ... end

Modify Flow message structure. See the section 7.3.4.1 of the OpenFlow 1.3.4 specification

module GroupType : sig ... end

See the ofp_group_type enumeration in section 7.3.4.2 of the OpenFlow 1.3.4 specification

module GroupMod : sig ... end

Modify Group message structure. See the section 7.3.4.2 of the OpenFlow 1.3.4 specification

module PortMod : sig ... end

Modify Port message structure. See the section 7.3.4.3 of the OpenFlow 1.3.4 specification

module MeterMod : sig ... end

Modify Meter message structure. See the section 7.3.4.4 of the OpenFlow 1.3.4 specification

module Instruction : sig ... end

Flow Instruction structure. See the section 7.2.4 of the OpenFlow 1.3.4 specification

module Instructions : sig ... end
module FlowMod : sig ... end

Modify flow message structure. See the section 7.3.4.1 of the OpenFlow 1.3.4 specification

module Capabilities : sig ... end

See the ofp_capabilities enumeration in section 7.3.1 of OpenFlow 1.3.4 specification

type switchFeatures = {
datapath_id : int64;
num_buffers : int32;
num_tables : Packet.int8;
aux_id : Packet.int8;
supported_capabilities : capabilities;
}
module SwitchFeatures : sig ... end

Switch Features structure. See the section 7.3.1 of the OpenFlow 1.3.4 specification

module PortState : sig ... end

See the ofp_port_state enumeration in section 7.2.1 of the OpenFlow 1.3.4 specification

module PortDesc : sig ... end

Description of a port structure. See the section 7.3.1 of the OpenFlow 1.3.4 specification

module PortStatus : sig ... end

Port Status structure. See the section 7.4.3 of the OpenFlow 1.3.4 specification

module PacketIn : sig ... end

Packet received by the datapath and sent to the controller structure. See the section 7.4.1 of the OpenFlow 1.3.4 specification

module PacketOut : sig ... end

Packet send out of the datapath structure. See the section 7.3.7 of the OpenFlow 1.3.4 specification

module MeterBand : sig ... end

Meter bands structure. See the section 7.3.4.4 of the OpenFlow 1.3.4 specification

module FlowRemoved : sig ... end

Flow Removed structure. See the section 7.4.2 of the OpenFlow 1.3.4 specification

module FlowRequest : sig ... end

Flow Statistics request structure. See the section 7.3.5.2 of the OpenFlow 1.3.4 specification this structure is the same for indidual and aggregate flow request

module QueueRequest : sig ... end

Queue Statistics request structure. See the section 7.3.5.8 of the OpenFlow 1.3.4 specification

module TableFeatureProp : sig ... end

Table Features property structure. See the section 7.3.5.5.2 of the OpenFlow 1.3.4 specification

module TableFeature : sig ... end

Table Feature structure. See the section 7.3.5.5.1 of the OpenFlow 1.3.4 specification

module MultipartReq : sig ... end

Multipart request message structure. See the section 7.3.5 of the OpenFlow 1.3.4 specification

module GroupStats : sig ... end

Group statistics structure. See the section 7.3.5.9 of the OpenFlow 1.3.4 specification

module SwitchDescriptionReply : sig ... end

Switch Description structure. See the section 7.3.5.1 of the OpenFlow 1.3.4 specification

module FlowStats : sig ... end

Individual Flow Statistics structure. See the section 7.3.5.2 of the OpenFlow 1.3.4 specification

module AggregateStats : sig ... end

Aggregate Flow Statistics structure. See the section 7.3.5.3 of the OpenFlow 1.3.4 specification

module TableStats : sig ... end

Table Statistics structure. See the section 7.3.5.4 of the OpenFlow 1.3.4 specification

module PortStats : sig ... end

Port Statistics structure. See the section 7.3.5.6 of the OpenFlow 1.3.4 specification

module QueueStats : sig ... end

Queue Statistics structure. See the section 7.3.5.8 of the OpenFlow 1.3.4 specification

module GroupDesc : sig ... end

Group Description structure. See the section 7.3.5.10 of the OpenFlow 1.3.4 specification

module GroupFeatures : sig ... end

Group Features structure. See the section 7.3.5.10 of the OpenFlow 1.3.4 specification

module MeterStats : sig ... end

Meter Statistics structure. See the section 7.3.5.12 of the OpenFlow 1.3.4 specification

module MeterConfig : sig ... end

Meter Configuration structure. See the section 7.3.5.13 of the OpenFlow 1.3.4 specification

module MeterFeatures : sig ... end

Meter Features structure. See the section 7.3.5.14 of the OpenFlow 1.3.4 specification

module MultipartReply : sig ... end

Multipart reply message structure. See the section 7.3.5 of the OpenFlow 1.3.4 specification

module TableMod : sig ... end

Modify Table message structure. See the section 7.3.3 of the OpenFlow 1.3.4 specification

module QueueConfReq : sig ... end

Queue Configuration request message structure. See the section 7.3.6 of the OpenFlow 1.3.4 specification

module QueueConfReply : sig ... end

Queue Configuration respond message structure. See the section 7.3.6 of the OpenFlow 1.3.4 specification

type error = {
err : errorTyp;
data : Cstruct.t;
}
module Error : sig ... end

Error message structure. See the section 7.4.4 of the OpenFlow 1.3.4 specification

module RoleRequest : sig ... end

Role Request message structure. See the section 7.3.9 of OpenFlow 1.3.4 specification

module Hello : sig ... end

Hello message structure. See the section 7.5.1 of the OpenFlow 1.3.4 specification

module AsyncConfig : sig ... end

Set Asynchronous message structure. See the section 7.3.10 of OpenFlow 1.3.4 specification

module Message : sig ... end