EOAM: changing to two byte match field
Change-Id: I88ef0f82005d2ad9a1030b4c3d5981284e74e8f2
diff --git a/voltha/adapters/tibit_olt/tibit_olt.py b/voltha/adapters/tibit_olt/tibit_olt.py
index e2ee432..f162a7d 100644
--- a/voltha/adapters/tibit_olt/tibit_olt.py
+++ b/voltha/adapters/tibit_olt/tibit_olt.py
@@ -36,7 +36,8 @@
PortIngressRuleResultSet, PortIngressRuleResultInsert, \
PortIngressRuleTerminator, AddPortIngressRule, CablelabsOUI, PonPortObject
from voltha.extensions.eoam.EOAM_TLV import PortIngressRuleHeader
-from voltha.extensions.eoam.EOAM_TLV import ClauseSubtypeEnum as Clause
+from voltha.extensions.eoam.EOAM_TLV import ClauseSubtypeEnum
+from voltha.extensions.eoam.EOAM_TLV import RuleOperatorEnum
from voltha.core.flow_decomposer import *
from voltha.core.logical_device_agent import mac_str_to_tuple
from voltha.protos.adapter_pb2 import Adapter, AdapterConfig
@@ -405,7 +406,8 @@
assert len(groups.items) == 0, "Cannot yet deal with groups"
- ClauseFields = {v: k for k, v in Clause.iteritems()}
+ Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
+ Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
for flow in flows.items:
in_port = get_in_port(flow)
@@ -421,13 +423,12 @@
for field in get_ofb_fields(flow):
if field.type == ETH_TYPE:
- log.info('#### field.type == ETH_TYPE ####')
_type = field.eth_type
+ log.info('#### field.type == ETH_TYPE ####')
dn_req /= PortIngressRuleClauseMatchLength02(
- fieldcode=ClauseFields['L2 Type/Len'],
- operator=1,
- match0=(_type >> 8) & 0xff,
- match1=_type & 0xff)
+ fieldcode=Clause['L2 Type/Len'],
+ operator=Operator['=='],
+ match=_type)
elif field.type == IP_PROTO:
_proto = field.ip_proto
@@ -470,7 +471,7 @@
if action.push.ethertype != 0x8100:
log.error('unhandled-ether-type',
ethertype=action.push.ethertype)
- dn_req /= PortIngressRuleResultInsert(fieldcode=ClauseFields['C-VLAN Tag'])
+ dn_req /= PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])
elif action.type == SET_FIELD:
assert (action.set_field.field.oxm_class ==
@@ -478,7 +479,7 @@
field = action.set_field.field.ofb_field
if field.type == VLAN_VID:
dn_req /= PortIngressRuleResultSet(
- fieldcode=ClauseFields['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
+ fieldcode=Clause['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
else:
log.error('unsupported-action-set-field-type',
field_type=field.type)
@@ -509,10 +510,9 @@
if field.type == ETH_TYPE:
_type = field.eth_type
up_req /= PortIngressRuleClauseMatchLength02(
- fieldcode=ClauseFields['L2 Type/Len'],
+ fieldcode=Clause['L2 Type/Len'],
operator=1,
- match0=(_type >> 8) & 0xff,
- match1=_type & 0xff)
+ match=_type)
elif field.type == IP_PROTO:
_proto = field.ip_proto
@@ -555,7 +555,7 @@
if action.push.ethertype != 0x8100:
log.error('unhandled-ether-type',
ethertype=action.push.ethertype)
- up_req /= PortIngressRuleResultInsert(fieldcode=ClauseFields['C-VLAN Tag'])
+ up_req /= PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])
elif action.type == SET_FIELD:
assert (action.set_field.field.oxm_class ==
@@ -563,7 +563,7 @@
field = action.set_field.field.ofb_field
if field.type == VLAN_VID:
up_req /= PortIngressRuleResultSet(
- fieldcode=ClauseFields['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
+ fieldcode=Clause['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
else:
log.error('unsupported-action-set-field-type',
field_type=field.type)
diff --git a/voltha/extensions/eoam/EOAM.py b/voltha/extensions/eoam/EOAM.py
index a671c4d..db081c1 100644
--- a/voltha/extensions/eoam/EOAM.py
+++ b/voltha/extensions/eoam/EOAM.py
@@ -163,6 +163,10 @@
help='Run commands under test')
parser.add_argument('-te', '--test_eapol', dest='test_eapol', action='store_true', default=False,
help='Run commands under test')
+ parser.add_argument('-ti', '--test_igmp', dest='test_igmp', action='store_true', default=False,
+ help='Run commands under test')
+ parser.add_argument('-th', '--test_dhcp', dest='test_dhcp', action='store_true', default=False,
+ help='Run commands under test')
parser.add_argument('-tu', '--test_upstream', dest='test_upstream', action='store_true', default=False,
help='Run commands under test')
parser.add_argument('-td', '--test_downstream', dest='test_downstream', action='store_true', default=False,
@@ -192,6 +196,8 @@
and not args.test_add
and not args.test_clr
and not args.test_eapol
+ and not args.test_igmp
+ and not args.test_dhcp
and not args.test_upstream
and not args.test_downstream
and not args.test_multicast):
@@ -222,23 +228,108 @@
#################################################################################
## EAPOL
#################################################################################
- print 'SET - Port Ingress Rule -- DOLT Port Object -- EAPOL'
- eoam.set_request(DOLTObject()/
+ Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
+ Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
+
+ print 'SET - Port Ingress Rule -- PON Port Object -- EAPOL'
+ eoam.set_request(PonPortObject()/
PortIngressRuleHeader(precedence=32)/
- PortIngressRuleClauseMatchLength02(fieldcode=3, operator=1, match0=0x88, match1=0x8e)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
+ operator=Operator['=='], match=0x888e)/
PortIngressRuleResultForward()/
- PortIngressRuleResultSet(fieldcode=7, value=4090)/
- PortIngressRuleResultInsert(fieldcode=7)/
+ PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4090)/
+ PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
PortIngressRuleTerminator()/
AddPortIngressRule())
- print 'Delete - Port Ingress Rule -- DOLT Port Object -- EAPOL'
- eoam.set_request(DOLTObject()/
+ time.sleep(3)
+
+ print 'Delete - Port Ingress Rule -- PON Port Object -- EAPOL'
+ eoam.set_request(PonPortObject()/
PortIngressRuleHeader(precedence=32)/
- PortIngressRuleClauseMatchLength02(fieldcode=3, operator=1, match0=0x88, match1=0x8e)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
+ operator=Operator['=='], match=0x888e)/
PortIngressRuleResultForward()/
- PortIngressRuleResultSet(fieldcode=7, value=4090)/
- PortIngressRuleResultInsert(fieldcode=7)/
+ PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4090)/
+ PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
+ PortIngressRuleTerminator()/
+ DeletePortIngressRule())
+
+ if (args.test_igmp == True):
+ #################################################################################
+ ## IGMP
+ #################################################################################
+ Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
+ Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
+
+ print 'SET - Port Ingress Rule -- PON Port Object -- IGMP'
+ eoam.set_request(PonPortObject()/
+ PortIngressRuleHeader(precedence=13)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
+ operator=Operator['=='], match=0x0800)/
+ PortIngressRuleClauseMatchLength01(fieldcode=Clause['IPv4/IPv6 Protocol Type'],
+ operator=Operator['=='], match=0x02)/
+ PortIngressRuleResultForward()/
+ PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4000)/
+ PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
+ PortIngressRuleTerminator()/
+ AddPortIngressRule())
+
+ time.sleep(3)
+
+ print 'Delete - Port Ingress Rule -- PON Port Object -- IGMP'
+ eoam.set_request(PonPortObject()/
+ PortIngressRuleHeader(precedence=13)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
+ operator=Operator['=='], match=0x0800)/
+ PortIngressRuleClauseMatchLength01(fieldcode=Clause['IPv4/IPv6 Protocol Type'],
+ operator=Operator['=='], match=0x02)/
+ PortIngressRuleResultForward()/
+ PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4000)/
+ PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
+ PortIngressRuleTerminator()/
+ DeletePortIngressRule())
+
+ if (args.test_dhcp == True):
+ #################################################################################
+ ## DHCP
+ #################################################################################
+ Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
+ Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
+
+ print 'SET - Port Ingress Rule -- PON Port Object -- DHCP'
+ eoam.set_request(PonPortObject()/
+ PortIngressRuleHeader(precedence=13)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
+ operator=Operator['=='], match=0x0800)/
+ PortIngressRuleClauseMatchLength01(fieldcode=Clause['IPv4/IPv6 Protocol Type'],
+ operator=Operator['=='], match=0x11)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP source port'],
+ operator=Operator['=='], match=0x0044)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP destination port'],
+ operator=Operator['=='], match=0x0043)/
+ PortIngressRuleResultForward()/
+ PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4000)/
+ PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
+ PortIngressRuleTerminator()/
+ AddPortIngressRule())
+
+ time.sleep(3)
+
+ print 'Delete - Port Ingress Rule -- PON Port Object -- DHCP'
+ eoam.set_request(PonPortObject()/
+ PortIngressRuleHeader(precedence=13)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
+ operator=Operator['=='], match=0x0800)/
+ PortIngressRuleClauseMatchLength01(fieldcode=Clause['IPv4/IPv6 Protocol Type'],
+ operator=Operator['=='], match=0x11)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP source port'],
+ operator=Operator['=='], match=0x0044)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP destination port'],
+ operator=Operator['=='], match=0x0043)/
+ PortIngressRuleResultForward()/
+ PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4000)/
+ PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
PortIngressRuleTerminator()/
DeletePortIngressRule())
@@ -246,35 +337,35 @@
#################################################################################
## UPSTREAM
#################################################################################
- ClauseFields = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
- OperatorFields = {v: k for k, v in RuleOperatorEnum.iteritems()}
+ Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
+ Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
print 'SET - Port Ingress Rule -- OLT Unicast Logical Link -- Upstream Traffic'
eoam.set_request(OLTUnicastLogicalLink(unicastvssn="TBIT", unicastlink=0xe2222900)/
PortIngressRuleHeader(precedence=13)/
- PortIngressRuleClauseMatchLength02(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=0,
- operator=OperatorFields['=='], match0=0x00, match1=0xf1)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
+ operator=Operator['=='], match=0x00f1)/
PortIngressRuleResultForward()/
- PortIngressRuleResultCopy(fieldcode=ClauseFields['C-VLAN Tag'])/
- PortIngressRuleResultInsert(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=1)/
- PortIngressRuleResultSet(fieldcode=ClauseFields['C-VLAN Tag'], value=1000)/
- PortIngressRuleResultReplace(fieldcode=ClauseFields['C-VLAN Tag'])/
+ PortIngressRuleResultCopy(fieldcode=Clause['C-VLAN Tag'])/
+ PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1)/
+ PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=1000)/
+ PortIngressRuleResultReplace(fieldcode=Clause['C-VLAN Tag'])/
PortIngressRuleTerminator()/
AddPortIngressRule())
- time.sleep(15)
+ time.sleep(3)
print 'DELETE - Port Ingress Rule -- OLT Unicast Logical Link -- Upstream Traffic'
eoam.set_request(OLTUnicastLogicalLink(unicastvssn="TBIT", unicastlink=0xe2222900)/
PortIngressRuleHeader(precedence=13)/
- PortIngressRuleClauseMatchLength02(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=0,
- operator=OperatorFields['=='], match0=0x00, match1=0xf1)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
+ operator=Operator['=='], match=0x00f1)/
PortIngressRuleResultForward()/
- PortIngressRuleResultCopy(fieldcode=ClauseFields['C-VLAN Tag'])/
- PortIngressRuleResultInsert(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=1)/
- PortIngressRuleResultSet(fieldcode=ClauseFields['C-VLAN Tag'], value=1000)/
- PortIngressRuleResultReplace(fieldcode=ClauseFields['C-VLAN Tag'])/
+ PortIngressRuleResultCopy(fieldcode=Clause['C-VLAN Tag'])/
+ PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1)/
+ PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=1000)/
+ PortIngressRuleResultReplace(fieldcode=Clause['C-VLAN Tag'])/
PortIngressRuleTerminator()/
DeletePortIngressRule())
@@ -282,35 +373,35 @@
#################################################################################
## DOWNSTREAM
#################################################################################
- ClauseFields = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
- OperatorFields = {v: k for k, v in RuleOperatorEnum.iteritems()}
+ Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
+ Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
print 'SET - Port Ingress Rule -- NNI Port Object -- Downstream Traffic'
eoam.set_request(NetworkToNetworkPortObject()/
PortIngressRuleHeader(precedence=13)/
- PortIngressRuleClauseMatchLength02(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=0,
- operator=OperatorFields['=='], match0=0x0f, match1=0xa0)/
- PortIngressRuleClauseMatchLength02(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=1,
- operator=OperatorFields['=='], match0=0x00, match1=0xf1)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
+ operator=Operator['=='], match=0x0fa0)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1,
+ operator=Operator['=='], match=0x00f1)/
PortIngressRuleResultOLTQueue(unicastvssn="TBIT", unicastlink=0xe2222900)/
PortIngressRuleResultForward()/
- PortIngressRuleResultDelete(fieldcode=ClauseFields['C-VLAN Tag'])/
+ PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
PortIngressRuleTerminator()/
AddPortIngressRule())
- time.sleep(15)
+ time.sleep(3)
print 'DELETE - Port Ingress Rule -- NNI Port Object -- Downstream Traffic'
eoam.set_request(NetworkToNetworkPortObject()/
PortIngressRuleHeader(precedence=13)/
- PortIngressRuleClauseMatchLength02(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=0,
- operator=OperatorFields['=='], match0=0x0f, match1=0xa0)/
- PortIngressRuleClauseMatchLength02(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=1,
- operator=OperatorFields['=='], match0=0x00, match1=0xf1)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
+ operator=Operator['=='], match=0x0fa0)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1,
+ operator=Operator['=='], match=0x00f1)/
PortIngressRuleResultOLTQueue(unicastvssn="TBIT", unicastlink=0xe2222900)/
PortIngressRuleResultForward()/
- PortIngressRuleResultDelete(fieldcode=ClauseFields['C-VLAN Tag'])/
+ PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
PortIngressRuleTerminator()/
DeletePortIngressRule())
@@ -318,30 +409,30 @@
#################################################################################
## MULTICAST
#################################################################################
- ClauseFields = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
- OperatorFields = {v: k for k, v in RuleOperatorEnum.iteritems()}
+ Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
+ Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
print 'SET - Port Ingress Rule -- NNI Port Object -- Downstream Multicast Traffic'
eoam.set_request(NetworkToNetworkPortObject()/
PortIngressRuleHeader(precedence=13)/
- PortIngressRuleClauseMatchLength02(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=0,
- operator=OperatorFields['=='], match0=0x00, match1=0x8c)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
+ operator=Operator['=='], match=0x008c)/
PortIngressRuleResultOLTBroadcastQueue()/
PortIngressRuleResultForward()/
- PortIngressRuleResultDelete(fieldcode=ClauseFields['C-VLAN Tag'])/
+ PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
PortIngressRuleTerminator()/
AddPortIngressRule())
- time.sleep(15)
+ time.sleep(3)
print 'DELETE - Port Ingress Rule -- NNI Port Object -- Downstream Multicast Traffic'
eoam.set_request(NetworkToNetworkPortObject()/
PortIngressRuleHeader(precedence=13)/
- PortIngressRuleClauseMatchLength02(fieldcode=ClauseFields['C-VLAN Tag'], fieldinstance=0,
- operator=OperatorFields['=='], match0=0x00, match1=0x8c)/
+ PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
+ operator=Operator['=='], match=0x008c)/
PortIngressRuleResultOLTBroadcastQueue()/
PortIngressRuleResultForward()/
- PortIngressRuleResultDelete(fieldcode=ClauseFields['C-VLAN Tag'])/
+ PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
PortIngressRuleTerminator()/
DeletePortIngressRule())
diff --git a/voltha/extensions/eoam/EOAM_TLV.py b/voltha/extensions/eoam/EOAM_TLV.py
index 0558aa4..6b9d96b 100644
--- a/voltha/extensions/eoam/EOAM_TLV.py
+++ b/voltha/extensions/eoam/EOAM_TLV.py
@@ -796,14 +796,14 @@
0x1f: "Custom field 7",
}
-RuleOperatorEnum = { 0x00: "F", #False
+RuleOperatorEnum = { 0x00: "F", #False
0x01: "==",
0x02: "!=",
0x03: "<=",
0x04: ">=",
0x05: "exists",
0x06: "!exist",
- 0x07: "T",
+ 0x07: "T", #True
}
class PortIngressRule(Packet):
@@ -851,7 +851,7 @@
XByteField("lsbmask", 0),
XByteField("operator", 0),
XByteField("matchlength", 1),
- XByteField("match0", 0),
+ XByteField("match", 0),
]
class PortIngressRuleClauseMatchLength02(Packet):
@@ -867,8 +867,7 @@
XByteField("lsbmask", 0),
XByteField("operator", 0),
XByteField("matchlength", 2),
- XByteField("match0", 0),
- XByteField("match1", 0),
+ XShortField("match", 0),
]