update pyloxi to floodlight/loxigen-artifacts @ b44eb26cc919f8bd61d0da059163a1a7dce088de
Pulls in OF 1.4.
diff --git a/src/python/loxi/of13/action.py b/src/python/loxi/of13/action.py
index 25f1e1f..04b17de 100644
--- a/src/python/loxi/of13/action.py
+++ b/src/python/loxi/of13/action.py
@@ -246,6 +246,71 @@
bsn.subtypes[4] = bsn_checksum
+class bsn_gentable(bsn):
+ type = 65535
+ experimenter = 6035143
+ subtype = 5
+
+ def __init__(self, table_id=None, key=None):
+ if table_id != None:
+ self.table_id = table_id
+ else:
+ self.table_id = 0
+ if key != None:
+ self.key = key
+ else:
+ self.key = []
+ return
+
+ def pack(self):
+ packed = []
+ packed.append(struct.pack("!H", self.type))
+ packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
+ packed.append(struct.pack("!L", self.experimenter))
+ packed.append(struct.pack("!L", self.subtype))
+ packed.append(struct.pack("!L", self.table_id))
+ packed.append(loxi.generic_util.pack_list(self.key))
+ length = sum([len(x) for x in packed])
+ packed[1] = struct.pack("!H", length)
+ return ''.join(packed)
+
+ @staticmethod
+ def unpack(reader):
+ obj = bsn_gentable()
+ _type = reader.read("!H")[0]
+ assert(_type == 65535)
+ _len = reader.read("!H")[0]
+ orig_reader = reader
+ reader = orig_reader.slice(_len - (2 + 2))
+ _experimenter = reader.read("!L")[0]
+ assert(_experimenter == 6035143)
+ _subtype = reader.read("!L")[0]
+ assert(_subtype == 5)
+ obj.table_id = reader.read("!L")[0]
+ obj.key = loxi.generic_util.unpack_list(reader, bsn_tlv.bsn_tlv.unpack)
+ return obj
+
+ def __eq__(self, other):
+ if type(self) != type(other): return False
+ if self.table_id != other.table_id: return False
+ if self.key != other.key: return False
+ return True
+
+ def pretty_print(self, q):
+ q.text("bsn_gentable {")
+ with q.group():
+ with q.indent(2):
+ q.breakable()
+ q.text("table_id = ");
+ q.text("%#x" % self.table_id)
+ q.text(","); q.breakable()
+ q.text("key = ");
+ q.pp(self.key)
+ q.breakable()
+ q.text('}')
+
+bsn.subtypes[5] = bsn_gentable
+
class bsn_mirror(bsn):
type = 65535
experimenter = 6035143
diff --git a/src/python/loxi/of13/action_id.py b/src/python/loxi/of13/action_id.py
index 6e3a3e6..b8e1a06 100644
--- a/src/python/loxi/of13/action_id.py
+++ b/src/python/loxi/of13/action_id.py
@@ -222,6 +222,52 @@
bsn.subtypes[4] = bsn_checksum
+class bsn_gentable(bsn):
+ type = 65535
+ experimenter = 6035143
+ subtype = 5
+
+ def __init__(self):
+ return
+
+ def pack(self):
+ packed = []
+ packed.append(struct.pack("!H", self.type))
+ packed.append(struct.pack("!H", 0)) # placeholder for len at index 1
+ packed.append(struct.pack("!L", self.experimenter))
+ packed.append(struct.pack("!L", self.subtype))
+ length = sum([len(x) for x in packed])
+ packed[1] = struct.pack("!H", length)
+ return ''.join(packed)
+
+ @staticmethod
+ def unpack(reader):
+ obj = bsn_gentable()
+ _type = reader.read("!H")[0]
+ assert(_type == 65535)
+ _len = reader.read("!H")[0]
+ orig_reader = reader
+ reader = orig_reader.slice(_len - (2 + 2))
+ _experimenter = reader.read("!L")[0]
+ assert(_experimenter == 6035143)
+ _subtype = reader.read("!L")[0]
+ assert(_subtype == 5)
+ return obj
+
+ def __eq__(self, other):
+ if type(self) != type(other): return False
+ return True
+
+ def pretty_print(self, q):
+ q.text("bsn_gentable {")
+ with q.group():
+ with q.indent(2):
+ q.breakable()
+ q.breakable()
+ q.text('}')
+
+bsn.subtypes[5] = bsn_gentable
+
class bsn_mirror(bsn):
type = 65535
experimenter = 6035143
diff --git a/src/python/loxi/of13/bsn_tlv.py b/src/python/loxi/of13/bsn_tlv.py
index 0b2b8c1..6ebb0fd 100644
--- a/src/python/loxi/of13/bsn_tlv.py
+++ b/src/python/loxi/of13/bsn_tlv.py
@@ -209,6 +209,53 @@
bsn_tlv.subtypes[42] = actor_port_priority
+class actor_state(bsn_tlv):
+ type = 53
+
+ def __init__(self, value=None):
+ if value != None:
+ self.value = value
+ else:
+ self.value = 0
+ return
+
+ def pack(self):
+ packed = []
+ packed.append(struct.pack("!H", self.type))
+ packed.append(struct.pack("!H", 0)) # placeholder for length at index 1
+ packed.append(struct.pack("!B", self.value))
+ length = sum([len(x) for x in packed])
+ packed[1] = struct.pack("!H", length)
+ return ''.join(packed)
+
+ @staticmethod
+ def unpack(reader):
+ obj = actor_state()
+ _type = reader.read("!H")[0]
+ assert(_type == 53)
+ _length = reader.read("!H")[0]
+ orig_reader = reader
+ reader = orig_reader.slice(_length - (2 + 2))
+ obj.value = reader.read("!B")[0]
+ return obj
+
+ def __eq__(self, other):
+ if type(self) != type(other): return False
+ if self.value != other.value: return False
+ return True
+
+ def pretty_print(self, q):
+ q.text("actor_state {")
+ with q.group():
+ with q.indent(2):
+ q.breakable()
+ q.text("value = ");
+ q.text("%#x" % self.value)
+ q.breakable()
+ q.text('}')
+
+bsn_tlv.subtypes[53] = actor_state
+
class actor_system_mac(bsn_tlv):
type = 41
@@ -1516,6 +1563,53 @@
bsn_tlv.subtypes[49] = partner_port_priority
+class partner_state(bsn_tlv):
+ type = 54
+
+ def __init__(self, value=None):
+ if value != None:
+ self.value = value
+ else:
+ self.value = 0
+ return
+
+ def pack(self):
+ packed = []
+ packed.append(struct.pack("!H", self.type))
+ packed.append(struct.pack("!H", 0)) # placeholder for length at index 1
+ packed.append(struct.pack("!B", self.value))
+ length = sum([len(x) for x in packed])
+ packed[1] = struct.pack("!H", length)
+ return ''.join(packed)
+
+ @staticmethod
+ def unpack(reader):
+ obj = partner_state()
+ _type = reader.read("!H")[0]
+ assert(_type == 54)
+ _length = reader.read("!H")[0]
+ orig_reader = reader
+ reader = orig_reader.slice(_length - (2 + 2))
+ obj.value = reader.read("!B")[0]
+ return obj
+
+ def __eq__(self, other):
+ if type(self) != type(other): return False
+ if self.value != other.value: return False
+ return True
+
+ def pretty_print(self, q):
+ q.text("partner_state {")
+ with q.group():
+ with q.indent(2):
+ q.breakable()
+ q.text("value = ");
+ q.text("%#x" % self.value)
+ q.breakable()
+ q.text('}')
+
+bsn_tlv.subtypes[54] = partner_state
+
class partner_system_mac(bsn_tlv):
type = 48
diff --git a/src/python/loxi/of13/common.py b/src/python/loxi/of13/common.py
index 3e30b70..361865d 100644
--- a/src/python/loxi/of13/common.py
+++ b/src/python/loxi/of13/common.py
@@ -3088,6 +3088,8 @@
table_feature_prop.subtypes[15] = table_feature_prop_apply_setfield_miss
class table_feature_prop_experimenter(table_feature_prop):
+ subtypes = {}
+
type = 65534
def __init__(self, experimenter=None, subtype=None, experimenter_data=None):
@@ -3118,6 +3120,11 @@
@staticmethod
def unpack(reader):
+ subtype, = reader.peek('!L', 4)
+ subclass = table_feature_prop_experimenter.subtypes.get(subtype)
+ if subclass:
+ return subclass.unpack(reader)
+
obj = table_feature_prop_experimenter()
_type = reader.read("!H")[0]
assert(_type == 65534)
@@ -3141,9 +3148,6 @@
with q.group():
with q.indent(2):
q.breakable()
- q.text("experimenter = ");
- q.text("%#x" % self.experimenter)
- q.text(","); q.breakable()
q.text("subtype = ");
q.text("%#x" % self.subtype)
q.text(","); q.breakable()
@@ -3155,6 +3159,8 @@
table_feature_prop.subtypes[65534] = table_feature_prop_experimenter
class table_feature_prop_experimenter_miss(table_feature_prop):
+ subtypes = {}
+
type = 65535
def __init__(self, experimenter=None, subtype=None, experimenter_data=None):
@@ -3185,6 +3191,11 @@
@staticmethod
def unpack(reader):
+ subtype, = reader.peek('!L', 4)
+ subclass = table_feature_prop_experimenter_miss.subtypes.get(subtype)
+ if subclass:
+ return subclass.unpack(reader)
+
obj = table_feature_prop_experimenter_miss()
_type = reader.read("!H")[0]
assert(_type == 65535)
@@ -3208,9 +3219,6 @@
with q.group():
with q.indent(2):
q.breakable()
- q.text("experimenter = ");
- q.text("%#x" % self.experimenter)
- q.text(","); q.breakable()
q.text("subtype = ");
q.text("%#x" % self.subtype)
q.text(","); q.breakable()
diff --git a/src/python/loxi/of13/const.py b/src/python/loxi/of13/const.py
index 0d2e531..adbbd83 100644
--- a/src/python/loxi/of13/const.py
+++ b/src/python/loxi/of13/const.py
@@ -25,42 +25,42 @@
OFPQ_MAX_RATE_UNCFG = 65535
OFPQ_MIN_RATE_UNCFG = 65535
-# Identifiers from group of_bsn_lacp_convergence_status_t
+# Identifiers from group of_bsn_lacp_convergence_status
LACP_SUCCESS = 0
LACP_TIMEDOUT = 1
LACP_OUT_OF_SYNC = 2
-of_bsn_lacp_convergence_status_t_map = {
+of_bsn_lacp_convergence_status_map = {
0: 'LACP_SUCCESS',
1: 'LACP_TIMEDOUT',
2: 'LACP_OUT_OF_SYNC',
}
-# Identifiers from group of_bsn_pdu_slot_num_t
+# Identifiers from group of_bsn_pdu_slot_num
BSN_PDU_SLOT_NUM_ANY = 255
-of_bsn_pdu_slot_num_t_map = {
+of_bsn_pdu_slot_num_map = {
255: 'BSN_PDU_SLOT_NUM_ANY',
}
-# Identifiers from group of_bsn_vlan_counter_t
+# Identifiers from group of_bsn_vlan_counter
OFP_BSN_VLAN_COUNTER_RX_BYTES = 0
OFP_BSN_VLAN_COUNTER_RX_PACKETS = 1
OFP_BSN_VLAN_COUNTER_TX_BYTES = 2
OFP_BSN_VLAN_COUNTER_TX_PACKETS = 3
-of_bsn_vlan_counter_t_map = {
+of_bsn_vlan_counter_map = {
0: 'OFP_BSN_VLAN_COUNTER_RX_BYTES',
1: 'OFP_BSN_VLAN_COUNTER_RX_PACKETS',
2: 'OFP_BSN_VLAN_COUNTER_TX_BYTES',
3: 'OFP_BSN_VLAN_COUNTER_TX_PACKETS',
}
-# Identifiers from group of_bsn_vrf_counter_t
+# Identifiers from group of_bsn_vrf_counter
OFP_BSN_VRF_COUNTER_BYTES = 0
OFP_BSN_VRF_COUNTER_PACKETS = 1
-of_bsn_vrf_counter_t_map = {
+of_bsn_vrf_counter_map = {
0: 'OFP_BSN_VRF_COUNTER_BYTES',
1: 'OFP_BSN_VRF_COUNTER_PACKETS',
}
@@ -246,6 +246,27 @@
2: 'OFP_BSN_CONTROLLER_ROLE_REASON_EXPERIMENTER',
}
+# Identifiers from group ofp_bsn_lacp_state
+OFP_BSN_LACP_STATE_ACTIVITY = 1
+OFP_BSN_LACP_STATE_TIMEOUT = 2
+OFP_BSN_LACP_STATE_AGGREGATION = 4
+OFP_BSN_LACP_STATE_SYNCHRONIZATION = 8
+OFP_BSN_LACP_STATE_COLLECTING = 16
+OFP_BSN_LACP_STATE_DISTRIBUTING = 32
+OFP_BSN_LACP_STATE_DEFAULTED = 64
+OFP_BSN_LACP_STATE_EXPIRED = 128
+
+ofp_bsn_lacp_state_map = {
+ 1: 'OFP_BSN_LACP_STATE_ACTIVITY',
+ 2: 'OFP_BSN_LACP_STATE_TIMEOUT',
+ 4: 'OFP_BSN_LACP_STATE_AGGREGATION',
+ 8: 'OFP_BSN_LACP_STATE_SYNCHRONIZATION',
+ 16: 'OFP_BSN_LACP_STATE_COLLECTING',
+ 32: 'OFP_BSN_LACP_STATE_DISTRIBUTING',
+ 64: 'OFP_BSN_LACP_STATE_DEFAULTED',
+ 128: 'OFP_BSN_LACP_STATE_EXPIRED',
+}
+
# Identifiers from group ofp_bsn_loglevel
OFP_BSN_LOGLEVEL_MSG = 0
OFP_BSN_LOGLEVEL_ERROR = 1