# Copyright (C) 2011, 2012 Nippon Telegraph and Telephone Corporation. # Copyright (C) 2011, 2012 Isaku Yamahata # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # 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 License for the specific language governing permissions and # limitations under the License. # Nicira extensions # Many of these definitions are common among OpenFlow versions. from struct import calcsize from ofproto_common import OFP_HEADER_SIZE # Action subtypes NXAST_RESUBMIT = 1 NXAST_SET_TUNNEL = 2 NXAST_DROP_SPOOFED_ARP__OBSOLETE = 3 NXAST_SET_QUEUE = 4 NXAST_POP_QUEUE = 5 NXAST_REG_MOVE = 6 NXAST_REG_LOAD = 7 NXAST_NOTE = 8 NXAST_SET_TUNNEL64 = 9 NXAST_MULTIPATH = 10 NXAST_AUTOPATH = 11 NXAST_BUNDLE = 12 NXAST_BUNDLE_LOAD = 13 NXAST_RESUBMIT_TABLE = 14 NXAST_OUTPUT_REG = 15 NXAST_LEARN = 16 NXAST_EXIT = 17 NXAST_DEC_TTL = 18 NXAST_FIN_TIMEOUT = 19 NXAST_CONTROLLER = 20 NX_ACTION_RESUBMIT_PACK_STR = '!HHIHHB3x' NX_ACTION_RESUBMIT_SIZE = 16 assert calcsize(NX_ACTION_RESUBMIT_PACK_STR) == NX_ACTION_RESUBMIT_SIZE NX_ACTION_SET_TUNNEL_PACK_STR = '!HHIH2xI' NX_ACTION_SET_TUNNEL_SIZE = 16 assert calcsize(NX_ACTION_SET_TUNNEL_PACK_STR) == NX_ACTION_SET_TUNNEL_SIZE NX_ACTION_SET_QUEUE_PACK_STR = '!HHIH2xI' NX_ACTION_SET_QUEUE_SIZE = 16 assert calcsize(NX_ACTION_SET_QUEUE_PACK_STR) == NX_ACTION_SET_QUEUE_SIZE NX_ACTION_POP_QUEUE_PACK_STR = '!HHIH6x' NX_ACTION_POP_QUEUE_SIZE = 16 assert calcsize(NX_ACTION_POP_QUEUE_PACK_STR) == NX_ACTION_POP_QUEUE_SIZE NX_ACTION_REG_MOVE_PACK_STR = '!HHIHHHHII' NX_ACTION_REG_MOVE_SIZE = 24 assert calcsize(NX_ACTION_REG_MOVE_PACK_STR) == NX_ACTION_REG_MOVE_SIZE NX_ACTION_REG_LOAD_PACK_STR = '!HHIHHIQ' NX_ACTION_REG_LOAD_SIZE = 24 assert calcsize(NX_ACTION_REG_LOAD_PACK_STR) == NX_ACTION_REG_LOAD_SIZE NX_ACTION_SET_TUNNEL64_PACK_STR = '!HHIH6xQ' NX_ACTION_SET_TUNNEL64_SIZE = 24 assert calcsize(NX_ACTION_SET_TUNNEL64_PACK_STR) == NX_ACTION_SET_TUNNEL64_SIZE NX_ACTION_MULTIPATH_PACK_STR = '!HHIHHH2xHHI2xHI' NX_ACTION_MULTIPATH_SIZE = 32 assert calcsize(NX_ACTION_MULTIPATH_PACK_STR) == NX_ACTION_MULTIPATH_SIZE NX_ACTION_NOTE_PACK_STR = '!HHIH6B' NX_ACTION_NOTE_SIZE = 16 assert calcsize(NX_ACTION_NOTE_PACK_STR) == NX_ACTION_NOTE_SIZE NX_ACTION_BUNDLE_PACK_STR = '!HHIHHHHIHHI4x' NX_ACTION_BUNDLE_SIZE = 32 assert calcsize(NX_ACTION_BUNDLE_PACK_STR) == NX_ACTION_BUNDLE_SIZE NX_ACTION_AUTOPATH_PACK_STR = '!HHIHHII4x' NX_ACTION_AUTOPATH_SIZE = 24 assert calcsize(NX_ACTION_AUTOPATH_PACK_STR) == NX_ACTION_AUTOPATH_SIZE NX_ACTION_OUTPUT_REG_PACK_STR = '!HHIHHIH6x' NX_ACTION_OUTPUT_REG_SIZE = 24 assert calcsize(NX_ACTION_OUTPUT_REG_PACK_STR) == NX_ACTION_OUTPUT_REG_SIZE NX_ACTION_LEARN_PACK_STR = '!HHIHHHHQHBxHH' NX_ACTION_LEARN_SIZE = 32 assert calcsize(NX_ACTION_LEARN_PACK_STR) == NX_ACTION_LEARN_SIZE NX_ACTION_CONTROLLER_PACK_STR = '!HHIHHHBB' NX_ACTION_CONTROLLER_SIZE = 16 assert calcsize(NX_ACTION_CONTROLLER_PACK_STR) == NX_ACTION_CONTROLLER_SIZE NX_ACTION_FIN_TIMEOUT_PACK_STR = '!HHIHHH2x' NX_ACTION_FIN_TIMEOUT_SIZE = 16 assert calcsize(NX_ACTION_FIN_TIMEOUT_PACK_STR) == NX_ACTION_FIN_TIMEOUT_SIZE NX_ACTION_HEADER_PACK_STR = '!HHIH6x' NX_ACTION_HEADER_SIZE = 16 assert calcsize(NX_ACTION_HEADER_PACK_STR) == NX_ACTION_HEADER_SIZE # Messages NXT_ROLE_REQUEST = 10 NXT_ROLE_REPLY = 11 NXT_SET_FLOW_FORMAT = 12 NXT_FLOW_MOD = 13 NXT_FLOW_REMOVED = 14 NXT_FLOW_MOD_TABLE_ID = 15 NXT_SET_PACKET_IN_FORMAT = 16 NXT_PACKET_IN = 17 NXT_FLOW_AGE = 18 NXT_SET_ASYNC_CONFIG = 19 NXT_SET_CONTROLLER_ID = 20 # enum nx_role NX_ROLE_OTHER = 0 NX_ROLE_MASTER = 1 NX_ROLE_SLAVE = 2 # enum nx_flow_format NXFF_OPENFLOW10 = 0 NXFF_NXM = 2 # enum nx_packet_in_format NXPIF_OPENFLOW10 = 0 NXPIF_NXM = 1 # enum nx_stats_types NXST_FLOW = 0 NXST_AGGREGATE = 1 NXST_FLOW_MONITOR = 2 NICIRA_HEADER_PACK_STR = '!II' NICIRA_HEADER_SIZE = 16 assert (calcsize(NICIRA_HEADER_PACK_STR) + OFP_HEADER_SIZE == NICIRA_HEADER_SIZE) NX_ROLE_PACK_STR = '!I' NX_ROLE_SIZE = 20 assert (calcsize(NX_ROLE_PACK_STR) + NICIRA_HEADER_SIZE == NX_ROLE_SIZE) NX_FLOW_MOD_PACK_STR = '!Q4HI3H6x' NX_FLOW_MOD_SIZE = 48 assert (calcsize(NX_FLOW_MOD_PACK_STR) + NICIRA_HEADER_SIZE == NX_FLOW_MOD_SIZE) NX_SET_FLOW_FORMAT_PACK_STR = '!I' NX_SET_FLOW_FORMAT_SIZE = 20 assert (calcsize(NX_SET_FLOW_FORMAT_PACK_STR) + NICIRA_HEADER_SIZE == NX_SET_FLOW_FORMAT_SIZE) NX_FLOW_REMOVED_PACK_STR = '!QHBxIIHHQQ' NX_FLOW_REMOVED_SIZE = 56 assert (calcsize(NX_FLOW_REMOVED_PACK_STR) + NICIRA_HEADER_SIZE == NX_FLOW_REMOVED_SIZE) NX_FLOW_MOD_TABLE_ID_PACK_STR = '!B7x' NX_FLOW_MOD_TABLE_ID_SIZE = 24 assert (calcsize(NX_FLOW_MOD_TABLE_ID_PACK_STR) + NICIRA_HEADER_SIZE == NX_FLOW_MOD_TABLE_ID_SIZE) NX_SET_PACKET_IN_FORMAT_PACK_STR = '!I' NX_SET_PACKET_IN_FORMAT_SIZE = 20 assert (calcsize(NX_SET_PACKET_IN_FORMAT_PACK_STR) + NICIRA_HEADER_SIZE == NX_SET_PACKET_IN_FORMAT_SIZE) NX_PACKET_IN_PACK_STR = '!IHBBQH6x' NX_PACKET_IN_SIZE = 40 assert (calcsize(NX_PACKET_IN_PACK_STR) + NICIRA_HEADER_SIZE == NX_PACKET_IN_SIZE) NX_ASYNC_CONFIG_PACK_STR = '!IIIIII' NX_ASYNC_CONFIG_SIZE = 40 assert (calcsize(NX_ASYNC_CONFIG_PACK_STR) + NICIRA_HEADER_SIZE == NX_ASYNC_CONFIG_SIZE) NX_CONTROLLER_ID_PACK_STR = '!6xH' NX_CONTROLLER_ID_SIZE = 24 assert (calcsize(NX_CONTROLLER_ID_PACK_STR) + NICIRA_HEADER_SIZE == NX_CONTROLLER_ID_SIZE) NX_STATS_MSG_PACK_STR = '!I4x' NX_STATS_MSG0_SIZE = 8 assert calcsize(NX_STATS_MSG_PACK_STR) == NX_STATS_MSG0_SIZE NX_STATS_MSG_SIZE = 24 _OFP_VENDOR_STATS_MSG_SIZE = 16 assert (calcsize(NX_STATS_MSG_PACK_STR) + _OFP_VENDOR_STATS_MSG_SIZE == NX_STATS_MSG_SIZE) NX_FLOW_STATS_REQUEST_PACK_STR = '!2HB3x' NX_FLOW_STATS_REQUEST_SIZE = 8 assert (calcsize(NX_FLOW_STATS_REQUEST_PACK_STR) == NX_FLOW_STATS_REQUEST_SIZE) NX_FLOW_STATS_PACK_STR = '!HBxIIHHHHHHQQQ' NX_FLOW_STATS_SIZE = 48 assert calcsize(NX_FLOW_STATS_PACK_STR) == NX_FLOW_STATS_SIZE NX_AGGREGATE_STATS_REQUEST_PACK_STR = '!2HB3x' NX_AGGREGATE_STATS_REQUEST_SIZE = 8 assert (calcsize(NX_AGGREGATE_STATS_REQUEST_PACK_STR) == NX_AGGREGATE_STATS_REQUEST_SIZE) NX_AGGREGATE_STATS_REPLY_PACK_STR = '!QQI4x' NX_AGGREGATE_STATS_REPLY_SIZE = 24 assert (calcsize(NX_AGGREGATE_STATS_REPLY_PACK_STR) == NX_AGGREGATE_STATS_REPLY_SIZE) # enum nx_hash_fields NX_HASH_FIELDS_ETH_SRC = 0 NX_HASH_FIELDS_SYMMETRIC_L4 = 1 # enum nx_mp_algorithm NX_MP_ALG_MODULO_N = 0 NX_MP_ALG_HASH_THRESHOLD = 1 NX_MP_ALG_HRW = 2 NX_MP_ALG_ITER_HASH = 3 # enum nx_bd_algorithm NX_BD_ALG_ACTIVE_BACKUP = 0 NX_BD_ALG_HRW = 1 # nx_learn constants NX_LEARN_N_BITS_MASK = 0x3ff NX_LEARN_SRC_FIELD = 0 << 13 # Copy from field. NX_LEARN_SRC_IMMEDIATE = 1 << 13 # Copy from immediate value. NX_LEARN_SRC_MASK = 1 << 13 NX_LEARN_DST_MATCH = 0 << 11 # Add match criterion. NX_LEARN_DST_LOAD = 1 << 11 # Add NXAST_REG_LOAD action NX_LEARN_DST_OUTPUT = 2 << 11 # Add OFPAT_OUTPUT action. NX_LEARN_DST_RESERVED = 3 << 11 # Not yet defined. NX_LEARN_DST_MASK = 3 << 11