package frenetic

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type
type 'a mask = {
  1. m_value : 'a;
  2. m_mask : 'a option;
}
val sexp_of_mask : ('a -> Ppx_sexp_conv_lib.Sexp.t) -> 'a mask -> Ppx_sexp_conv_lib.Sexp.t
val mask_of_sexp : (Ppx_sexp_conv_lib.Sexp.t -> 'a) -> Ppx_sexp_conv_lib.Sexp.t -> 'a mask
type 'a asyncMask = {
  1. m_master : 'a;
  2. m_slave : 'a;
}
val sexp_of_asyncMask : ('a -> Ppx_sexp_conv_lib.Sexp.t) -> 'a asyncMask -> Ppx_sexp_conv_lib.Sexp.t
val asyncMask_of_sexp : (Ppx_sexp_conv_lib.Sexp.t -> 'a) -> Ppx_sexp_conv_lib.Sexp.t -> 'a asyncMask
type payload =
  1. | Buffered of int32 * Cstruct.t
    (*

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

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

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 =
  1. | PhysicalPort of portId
  2. | 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.

    *)
  3. | Table
    (*

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

    *)
  4. | Normal
    (*

    Process with normal L2/L3 switching.

    *)
  5. | Flood
    (*

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

    *)
  6. | AllPorts
    (*

    All physical ports except input port.

    *)
  7. | Controller of Packet.int16
    (*

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

    *)
  8. | Local
    (*

    Local openflow "port".

    *)
  9. | 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.

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