893517cb29
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
242 lines
7.2 KiB
Python
242 lines
7.2 KiB
Python
# Copyright (C) 2011, 2012 Nippon Telegraph and Telephone Corporation.
|
|
# Copyright (C) 2011, 2012 Isaku Yamahata <yamahata at valinux co jp>
|
|
#
|
|
# 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
|