mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00

* "bro_is_terminating" is now "zeek_is_terminating" * "bro_version" is now "zeek_version" The old function names still exist for now, but are deprecated.
229 lines
6.7 KiB
Text
229 lines
6.7 KiB
Text
##! Constants used by the OpenFlow framework.
|
|
|
|
# All types/constants not specific to OpenFlow will be defined here
|
|
# until they somehow get into Zeek.
|
|
|
|
module OpenFlow;
|
|
|
|
# Some cookie specific constants.
|
|
# first 24 bits
|
|
const COOKIE_BID_SIZE = 16777216;
|
|
# start at bit 40 (1 << 40)
|
|
const COOKIE_BID_START = 1099511627776;
|
|
# Zeek specific cookie ID shall have the 42 bit set (1 << 42)
|
|
const ZEEK_COOKIE_ID = 4;
|
|
# 8 bits group identifier
|
|
const COOKIE_GID_SIZE = 256;
|
|
# start at bit 32 (1 << 32)
|
|
const COOKIE_GID_START = 4294967296;
|
|
# 32 bits unique identifier
|
|
const COOKIE_UID_SIZE = 4294967296;
|
|
# start at bit 0 (1 << 0)
|
|
const COOKIE_UID_START = 0;
|
|
|
|
export {
|
|
# All ethertypes can be found at
|
|
# http://standards.ieee.org/develop/regauth/ethertype/eth.txt
|
|
# but are not interesting for us at this point
|
|
#type ethertype: enum {
|
|
# Internet protocol version 4
|
|
const ETH_IPv4 = 0x0800;
|
|
# Address resolution protocol
|
|
const ETH_ARP = 0x0806;
|
|
# Wake on LAN
|
|
const ETH_WOL = 0x0842;
|
|
# Reverse address resolution protocol
|
|
const ETH_RARP = 0x8035;
|
|
# Appletalk
|
|
const ETH_APPLETALK = 0x809B;
|
|
# Appletalk address resolution protocol
|
|
const ETH_APPLETALK_ARP = 0x80F3;
|
|
# IEEE 802.1q & IEEE 802.1aq
|
|
const ETH_VLAN = 0x8100;
|
|
# Novell IPX old
|
|
const ETH_IPX_OLD = 0x8137;
|
|
# Novell IPX
|
|
const ETH_IPX = 0x8138;
|
|
# Internet protocol version 6
|
|
const ETH_IPv6 = 0x86DD;
|
|
# IEEE 802.3x
|
|
const ETH_ETHER_FLOW_CONTROL = 0x8808;
|
|
# Multiprotocol Label Switching unicast
|
|
const ETH_MPLS_UNICAST = 0x8847;
|
|
# Multiprotocol Label Switching multicast
|
|
const ETH_MPLS_MULTICAST = 0x8848;
|
|
# Point-to-point protocol over Ethernet discovery phase (rfc2516)
|
|
const ETH_PPPOE_DISCOVERY = 0x8863;
|
|
# Point-to-point protocol over Ethernet session phase (rfc2516)
|
|
const ETH_PPPOE_SESSION = 0x8864;
|
|
# Jumbo frames
|
|
const ETH_JUMBO_FRAMES = 0x8870;
|
|
# IEEE 802.1X
|
|
const ETH_EAP_OVER_LAN = 0x888E;
|
|
# IEEE 802.1ad & IEEE 802.1aq
|
|
const ETH_PROVIDER_BRIDING = 0x88A8;
|
|
# IEEE 802.1ae
|
|
const ETH_MAC_SECURITY = 0x88E5;
|
|
# IEEE 802.1ad (QinQ)
|
|
const ETH_QINQ = 0x9100;
|
|
#};
|
|
|
|
# A list of ip protocol numbers can be found at
|
|
# http://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
|
|
#type iptype: enum {
|
|
# IPv6 Hop-by-Hop Option (RFC2460)
|
|
const IP_HOPOPT = 0x00;
|
|
# Internet Control Message Protocol (RFC792)
|
|
const IP_ICMP = 0x01;
|
|
# Internet Group Management Protocol (RFC1112)
|
|
const IP_IGMP = 0x02;
|
|
# Gateway-to-Gateway Protocol (RFC823)
|
|
const IP_GGP = 0x03;
|
|
# IP-Within-IP (encapsulation) (RFC2003)
|
|
const IP_IPIP = 0x04;
|
|
# Internet Stream Protocol (RFC1190;RFC1819)
|
|
const IP_ST = 0x05;
|
|
# Tansmission Control Protocol (RFC793)
|
|
const IP_TCP = 0x06;
|
|
# Core-based trees (RFC2189)
|
|
const IP_CBT = 0x07;
|
|
# Exterior Gateway Protocol (RFC888)
|
|
const IP_EGP = 0x08;
|
|
# Interior Gateway Protocol (any private interior
|
|
# gateway (used by Cisco for their IGRP))
|
|
const IP_IGP = 0x09;
|
|
# User Datagram Protocol (RFC768)
|
|
const IP_UDP = 0x11;
|
|
# Reliable Datagram Protocol (RFC908)
|
|
const IP_RDP = 0x1B;
|
|
# IPv6 Encapsulation (RFC2473)
|
|
const IP_IPv6 = 0x29;
|
|
# Resource Reservation Protocol (RFC2205)
|
|
const IP_RSVP = 0x2E;
|
|
# Generic Routing Encapsulation (RFC2784;RFC2890)
|
|
const IP_GRE = 0x2F;
|
|
# Open Shortest Path First (RFC1583)
|
|
const IP_OSPF = 0x59;
|
|
# Multicast Transport Protocol
|
|
const IP_MTP = 0x5C;
|
|
# IP-within-IP Encapsulation Protocol (RFC2003)
|
|
### error 0x5E;
|
|
# Ethernet-within-IP Encapsulation Protocol (RFC3378)
|
|
const IP_ETHERIP = 0x61;
|
|
# Layer Two Tunneling Protocol Version 3 (RFC3931)
|
|
const IP_L2TP = 0x73;
|
|
# Intermediate System to Intermediate System (IS-IS) Protocol over IPv4 (RFC1142;RFC1195)
|
|
const IP_ISIS = 0x7C;
|
|
# Fibre Channel
|
|
const IP_FC = 0x85;
|
|
# Multiprotocol Label Switching Encapsulated in IP (RFC4023)
|
|
const IP_MPLS = 0x89;
|
|
#};
|
|
|
|
## Return value for a cookie from a flow
|
|
## which is not added, modified or deleted
|
|
## from the Zeek openflow framework.
|
|
const INVALID_COOKIE = 0xffffffffffffffff;
|
|
# Openflow physical port definitions
|
|
## Send the packet out the input port. This
|
|
## virual port must be explicitly used in
|
|
## order to send back out of the input port.
|
|
const OFPP_IN_PORT = 0xfffffff8;
|
|
## Perform actions in flow table.
|
|
## NB: This can only be the destination port
|
|
## for packet-out messages.
|
|
const OFPP_TABLE = 0xfffffff9;
|
|
## Process with normal L2/L3 switching.
|
|
const OFPP_NORMAL = 0xfffffffa;
|
|
## All physical ports except input port and
|
|
## those disabled by STP.
|
|
const OFPP_FLOOD = 0xfffffffb;
|
|
## All physical ports except input port.
|
|
const OFPP_ALL = 0xfffffffc;
|
|
## Send to controller.
|
|
const OFPP_CONTROLLER = 0xfffffffd;
|
|
## Local openflow "port".
|
|
const OFPP_LOCAL = 0xfffffffe;
|
|
## Wildcard port used only for flow mod (delete) and flow stats requests.
|
|
const OFPP_ANY = 0xffffffff;
|
|
# Openflow no buffer constant.
|
|
const OFP_NO_BUFFER = 0xffffffff;
|
|
## Send flow removed message when flow
|
|
## expires or is deleted.
|
|
const OFPFF_SEND_FLOW_REM = 0x1;
|
|
## Check for overlapping entries first.
|
|
const OFPFF_CHECK_OVERLAP = 0x2;
|
|
## Remark this is for emergency.
|
|
## Flows added with this are only used
|
|
## when the controller is disconnected.
|
|
const OFPFF_EMERG = 0x4;
|
|
|
|
# Wildcard table used for table config,
|
|
# flow stats and flow deletes.
|
|
const OFPTT_ALL = 0xff;
|
|
|
|
## Openflow action_type definitions.
|
|
##
|
|
## The openflow action type defines
|
|
## what actions openflow can take
|
|
## to modify a packet
|
|
type ofp_action_type: enum {
|
|
## Output to switch port.
|
|
OFPAT_OUTPUT = 0x0000,
|
|
## Set the 802.1q VLAN id.
|
|
OFPAT_SET_VLAN_VID = 0x0001,
|
|
## Set the 802.1q priority.
|
|
OFPAT_SET_VLAN_PCP = 0x0002,
|
|
## Strip the 802.1q header.
|
|
OFPAT_STRIP_VLAN = 0x0003,
|
|
## Ethernet source address.
|
|
OFPAT_SET_DL_SRC = 0x0004,
|
|
## Ethernet destination address.
|
|
OFPAT_SET_DL_DST = 0x0005,
|
|
## IP source address.
|
|
OFPAT_SET_NW_SRC = 0x0006,
|
|
## IP destination address.
|
|
OFPAT_SET_NW_DST = 0x0007,
|
|
## IP ToS (DSCP field, 6 bits).
|
|
OFPAT_SET_NW_TOS = 0x0008,
|
|
## TCP/UDP source port.
|
|
OFPAT_SET_TP_SRC = 0x0009,
|
|
## TCP/UDP destination port.
|
|
OFPAT_SET_TP_DST = 0x000a,
|
|
## Output to queue.
|
|
OFPAT_ENQUEUE = 0x000b,
|
|
## Vendor specific.
|
|
OFPAT_VENDOR = 0xffff,
|
|
};
|
|
|
|
## Openflow flow_mod_command definitions.
|
|
##
|
|
## The openflow flow_mod_command describes
|
|
## of what kind an action is.
|
|
type ofp_flow_mod_command: enum {
|
|
## New flow.
|
|
OFPFC_ADD = 0x0,
|
|
## Modify all matching flows.
|
|
OFPFC_MODIFY = 0x1,
|
|
## Modify entry strictly matching wildcards.
|
|
OFPFC_MODIFY_STRICT = 0x2,
|
|
## Delete all matching flows.
|
|
OFPFC_DELETE = 0x3,
|
|
## Strictly matching wildcards and priority.
|
|
OFPFC_DELETE_STRICT = 0x4,
|
|
};
|
|
|
|
## Openflow config flag definitions.
|
|
##
|
|
## TODO: describe
|
|
type ofp_config_flags: enum {
|
|
## No special handling for fragments.
|
|
OFPC_FRAG_NORMAL = 0,
|
|
## Drop fragments.
|
|
OFPC_FRAG_DROP = 1,
|
|
## Reassemble (only if OFPC_IP_REASM set).
|
|
OFPC_FRAG_REASM = 2,
|
|
OFPC_FRAG_MASK = 3,
|
|
};
|
|
|
|
}
|