single vlan pair at a time
diff --git a/olt.py b/olt.py
index d2856b5..12232f4 100644
--- a/olt.py
+++ b/olt.py
@@ -918,141 +918,142 @@
def runTest(self):
logging.info("Running cycling vlan test")
- delete_all_flows(self.controller)
self.cookie = 42
- self.vlan_pairs = []
-
for stag in xrange(2, 4000, 100):
for ctag in xrange(2, 4000, 100):
+ delete_all_flows(self.controller)
+ time.sleep(5)
self.installDoubleTaggingRule(stag, ctag)
- self.vlan_pairs.append((stag, ctag))
- time.sleep(1)
+ self.vlan_pairs = (stag, ctag)
+ time.sleep(5)
self.testPacketFlow()
def testPacketFlow(self):
- for (s_vlan_id, c_vlan_id) in self.vlan_pairs:
- incorrectTagPkt = simple_udp_packet(pktlen=100, dl_vlan_enable=True, vlan_vid=100, vlan_pcp=0)
- untaggedPkt = simple_udp_packet(pktlen=100, dl_vlan_enable=True, vlan_vid=0, vlan_pcp=0)
+ (s_vlan_id, c_vlan_id) = self.vlan_pairs
+
+ incorrectTagPkt = simple_udp_packet(pktlen=100, dl_vlan_enable=True, vlan_vid=100, vlan_pcp=0)
+ untaggedPkt = simple_udp_packet(pktlen=100, dl_vlan_enable=True, vlan_vid=0, vlan_pcp=0)
- upstreamDoubleTaggedPkt = double_vlan_udp_packet(pktlen=104, dl_vlan_enable=True,
- c_vlan_vid=c_vlan_id,
- s_vlan_vid=s_vlan_id,
- c_vlan_pcp=0, s_vlan_pcp=0)
+ upstreamDoubleTaggedPkt = double_vlan_udp_packet(pktlen=104, dl_vlan_enable=True,
+ c_vlan_vid=c_vlan_id,
+ s_vlan_vid=s_vlan_id,
+ c_vlan_pcp=0, s_vlan_pcp=0)
- logging.info("Testing s-tag %d, c-tag %d" % (s_vlan_id, c_vlan_id))
+ logging.info("Testing s-tag %d, c-tag %d" % (s_vlan_id, c_vlan_id))
- self.dataplane.send(onu_port, str(untaggedPkt))
- verify_packet(self, upstreamDoubleTaggedPkt, olt_port)
+ self.dataplane.send(onu_port, str(untaggedPkt))
+ verify_packet(self, upstreamDoubleTaggedPkt, olt_port)
- # test downstream doubletagged packet got untagged at ONU
- self.dataplane.send(olt_port, str(upstreamDoubleTaggedPkt))
- verify_packet(self, untaggedPkt, onu_port)
+ # test downstream doubletagged packet got untagged at ONU
+ self.dataplane.send(olt_port, str(upstreamDoubleTaggedPkt))
+ verify_packet(self, untaggedPkt, onu_port)
- # test upstream doubletagged packet got dropped
- self.dataplane.send(onu_port, str(upstreamDoubleTaggedPkt))
- verify_no_packet(self, upstreamDoubleTaggedPkt, olt_port)
+ # test upstream doubletagged packet got dropped
+ self.dataplane.send(onu_port, str(upstreamDoubleTaggedPkt))
+ verify_no_packet(self, upstreamDoubleTaggedPkt, olt_port)
- # test downstream untagged packet got dropped at ONU
- self.dataplane.send(olt_port, str(untaggedPkt))
- verify_no_packet(self, untaggedPkt, onu_port)
+ # test downstream untagged packet got dropped at ONU
+ self.dataplane.send(olt_port, str(untaggedPkt))
+ verify_no_packet(self, untaggedPkt, onu_port)
- # test upstream icorrectly tagged packet; should get dropped
- self.dataplane.send(onu_port, str(incorrectTagPkt))
- verify_no_packet(self, upstreamDoubleTaggedPkt, olt_port)
+ # test upstream icorrectly tagged packet; should get dropped
+ self.dataplane.send(onu_port, str(incorrectTagPkt))
+ verify_no_packet(self, upstreamDoubleTaggedPkt, olt_port)
- def installDoubleTaggingRule(self, s_vlan_id, c_vlan_id):
- # upstream flow rule
- match = ofp.match()
- match.oxm_list.append(ofp.oxm.in_port(onu_port))
- match.oxm_list.append(ofp.oxm.vlan_vid(value=ofp.OFPVID_PRESENT))
- match.oxm_list.append(ofp.oxm.vlan_pcp(value=0))
- self.cookie += 1
- # push inner vlan (c-vlan) for upstream
- request = ofp.message.flow_add(
- table_id=test_param_get("table", 0),
- cookie=self.cookie,
- match=match,
- instructions=[
- ofp.instruction.apply_actions(
- actions=[
- ofp.action.set_field(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | c_vlan_id))]),
- ofp.instruction.goto_table(1)],
- buffer_id=ofp.OFP_NO_BUFFER,
- priority=1000)
+def installDoubleTaggingRule(self, s_vlan_id, c_vlan_id):
+ # upstream flow rule
+ match = ofp.match()
+ match.oxm_list.append(ofp.oxm.in_port(onu_port))
+ match.oxm_list.append(ofp.oxm.vlan_vid(value=ofp.OFPVID_PRESENT))
+ match.oxm_list.append(ofp.oxm.vlan_pcp(value=0))
+ self.cookie += 1
- self.controller.message_send(request)
- do_barrier(self.controller)
- verify_no_errors(self.controller)
+ # push inner vlan (c-vlan) for upstream
+ request = ofp.message.flow_add(
+ table_id=test_param_get("table", 0),
+ cookie=self.cookie,
+ match=match,
+ instructions=[
+ ofp.instruction.apply_actions(
+ actions=[
+ ofp.action.set_field(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | c_vlan_id))]),
+ ofp.instruction.goto_table(1)],
+ buffer_id=ofp.OFP_NO_BUFFER,
+ priority=1000)
- # push outer vlan (s-vlan) for upstream
- match = ofp.match()
- match.oxm_list.append(ofp.oxm.in_port(onu_port))
- match.oxm_list.append(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | c_vlan_id))
- match.oxm_list.append(ofp.oxm.vlan_pcp(0))
- self.cookie += 1
+ self.controller.message_send(request)
+ do_barrier(self.controller)
+ verify_no_errors(self.controller)
- request = ofp.message.flow_add(
- table_id=test_param_get("table", 1),
- cookie=self.cookie,
- match=match,
- instructions=[
- ofp.instruction.apply_actions(
- actions=[
- ofp.action.push_vlan(ethertype=0x8100),
- ofp.action.set_field(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | s_vlan_id)),
- ofp.action.set_field(ofp.oxm.vlan_pcp(0)),
- ofp.action.output(port=olt_port)]),
- ],
- buffer_id=ofp.OFP_NO_BUFFER,
- priority=1000)
+ # push outer vlan (s-vlan) for upstream
+ match = ofp.match()
+ match.oxm_list.append(ofp.oxm.in_port(onu_port))
+ match.oxm_list.append(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | c_vlan_id))
+ match.oxm_list.append(ofp.oxm.vlan_pcp(0))
+ self.cookie += 1
- self.controller.message_send(request)
- do_barrier(self.controller)
- verify_no_errors(self.controller)
- self.cookie += 1
+ request = ofp.message.flow_add(
+ table_id=test_param_get("table", 1),
+ cookie=self.cookie,
+ match=match,
+ instructions=[
+ ofp.instruction.apply_actions(
+ actions=[
+ ofp.action.push_vlan(ethertype=0x8100),
+ ofp.action.set_field(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | s_vlan_id)),
+ ofp.action.set_field(ofp.oxm.vlan_pcp(0)),
+ ofp.action.output(port=olt_port)]),
+ ],
+ buffer_id=ofp.OFP_NO_BUFFER,
+ priority=1000)
- # strip outer vlan (s-vlan) for downstream
- match = ofp.match()
- match.oxm_list.append(ofp.oxm.in_port(olt_port))
- match.oxm_list.append(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | s_vlan_id))
- match.oxm_list.append(ofp.oxm.vlan_pcp(0))
- request = ofp.message.flow_add(
- table_id=test_param_get("table", 0),
- cookie=self.cookie,
- match=match,
- instructions=[
- ofp.instruction.apply_actions(
- actions=[ofp.action.pop_vlan()]),
- ofp.instruction.goto_table(1)],
- buffer_id=ofp.OFP_NO_BUFFER,
- priority=1000)
+ self.controller.message_send(request)
+ do_barrier(self.controller)
+ verify_no_errors(self.controller)
+ self.cookie += 1
- self.controller.message_send(request)
- do_barrier(self.controller)
- verify_no_errors(self.controller)
+ # strip outer vlan (s-vlan) for downstream
+ match = ofp.match()
+ match.oxm_list.append(ofp.oxm.in_port(olt_port))
+ match.oxm_list.append(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | s_vlan_id))
+ match.oxm_list.append(ofp.oxm.vlan_pcp(0))
+ request = ofp.message.flow_add(
+ table_id=test_param_get("table", 0),
+ cookie=self.cookie,
+ match=match,
+ instructions=[
+ ofp.instruction.apply_actions(
+ actions=[ofp.action.pop_vlan()]),
+ ofp.instruction.goto_table(1)],
+ buffer_id=ofp.OFP_NO_BUFFER,
+ priority=1000)
- # rewrite inner vlan (c-vlan) to default (0) for downstream
- match = ofp.match()
- match.oxm_list.append(ofp.oxm.in_port(olt_port))
- match.oxm_list.append(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | c_vlan_id))
- match.oxm_list.append(ofp.oxm.vlan_pcp(0))
- self.cookie += 1
+ self.controller.message_send(request)
+ do_barrier(self.controller)
+ verify_no_errors(self.controller)
- request = ofp.message.flow_add(
- table_id=test_param_get("table", 1),
- cookie=self.cookie,
- match=match,
- instructions=[
- ofp.instruction.apply_actions(
- actions=[
- ofp.action.pop_vlan(),
- ofp.action.output(port=onu_port)])
- ],
- buffer_id=ofp.OFP_NO_BUFFER,
- priority=1000)
+ # rewrite inner vlan (c-vlan) to default (0) for downstream
+ match = ofp.match()
+ match.oxm_list.append(ofp.oxm.in_port(olt_port))
+ match.oxm_list.append(ofp.oxm.vlan_vid(ofp.OFPVID_PRESENT | c_vlan_id))
+ match.oxm_list.append(ofp.oxm.vlan_pcp(0))
+ self.cookie += 1
- self.controller.message_send(request)
- do_barrier(self.controller)
- verify_no_errors(self.controller)
+ request = ofp.message.flow_add(
+ table_id=test_param_get("table", 1),
+ cookie=self.cookie,
+ match=match,
+ instructions=[
+ ofp.instruction.apply_actions(
+ actions=[
+ ofp.action.pop_vlan(),
+ ofp.action.output(port=onu_port)])
+ ],
+ buffer_id=ofp.OFP_NO_BUFFER,
+ priority=1000)
+
+ self.controller.message_send(request)
+ do_barrier(self.controller)
+ verify_no_errors(self.controller)