Multipoint request on renci testbed that includes 4 sites. Duke is not correctly forwarding traffic to/from NCSU.
In this example, Duke is both endpoint switch and tree node (see the diagram below), the code here in L2MultipointPolicy.py, first checks the endpoint switch, which is skipped in the following tree nodes breakdown rule.
|
if node in covered_nodes: |
L2MultipointEndpointLCRule does generate a set of flood ports to flood the traffic, so need to check the detailed flow entries.
Request:
curl \
-X POST http://atlanticwave-sdx-controller.renci.ben:5000/api/v1/policies/type/L2Multipoint \
-b cookie-mcevik.txt \
-H "Content-Type: application/json" \
--data-binary @- <<EOF
{
"L2Multipoint":
{
"starttime":"2020-09-04T10:00:00",
"endtime":"2025-10-09T15:59:00",
"endpoints":
[{"switch":"uncs1","port":12,"vlan":1423},
{"switch":"rencis2","port":8,"vlan":1425},
{"switch":"ncsus1","port":12,"vlan":1424},
{"switch":"dukes1","port":12,"vlan":1422}],
"bandwidth":8000
}
}
EOF
Tree structure:
2020-10-01 17:48:49,657 debug.sdxcontroller.topologymanager: 139622684415744 DEBUG find_valid_steiner_tree: Successful [('rencis1', 'rencis2'), ('rencis1', 'dukes1'), ('rencis1', 'uncs1'), ('dukes1', 'ncsus1')]
2020-10-01 17:48:49,658 debug.sdxcontroller.topologymanager: 139622684415744 DEBUG find_vlan_on_tree: ['rencis1', 'rencis2', 'dukes1', 'ncsus1', 'uncs1']
2020-10-01 17:48:49,659 debug.sdxcontroller.topologymanager: 139622684415744 DEBUG find_vlan_on_tree returning 1
Rules:
2020-10-01 17:48:49,637 sdxcontroller.rest: 139622684415744 INFO - JSON data {u'L2Multipoint': {u'endpoints': [{u'switch': u'uncs1', u'vlan': 1423, u'port': 12}, {u'switch': u'rencis2', u'vlan': 1425, u'port': 8}, {u'switch': u'ncsus1', u'vlan': 1424, u'port': 12}, {u'switch': u'dukes1', u'vlan': 1422, u'port': 12}], u'bandwidth': 8000, u'endtime': u'2025-10-09T15:59:00', u'starttime': u'2020-09-04T10:00:00'}}
2020-10-01 17:48:49,644 sdxcontroller.rulemanager: 139622684415744 INFO add_rule: Beging with rule: L2Multipoint(2020-09-04T10:00:00,2025-10-09T15:59:00,[{'switch': 'uncs1', 'vlan': 1423, 'port': 12}, {'switch': 'rencis2', 'vlan': 1425, 'port': 8}, {'switch': 'ncsus1', 'vlan': 1424, 'port': 12}, {'switch': 'dukes1', 'vlan': 1422, 'port': 12}])
2020-10-01 17:48:49,666 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: VLAN Tree: ,1
2020-10-01 17:48:49,667 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: B/W Tree: ,8000
2020-10-01 17:48:49,668 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: VLAN Port: ('uncs1', 12),1423
2020-10-01 17:48:49,669 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: B/W Port: ('uncs1', 12),8000
2020-10-01 17:48:49,671 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: VLAN Port: ('rencis2', 8),1425
2020-10-01 17:48:49,672 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: B/W Port: ('rencis2', 8),8000
2020-10-01 17:48:49,674 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: VLAN Port: ('ncsus1', 12),1424
2020-10-01 17:48:49,676 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: B/W Port: ('ncsus1', 12),8000
2020-10-01 17:48:49,678 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: VLAN Port: ('dukes1', 12),1422
2020-10-01 17:48:49,679 sdxcontroller.rulemanager: 139622684415744 DEBUG _reserve_resources: B/W Port: ('dukes1', 12),8000
2020-10-01 17:48:49,681 sdxcontroller.rulemanager: 139622684415744 DEBUG Sending install breakdown: <shared.UserPolicy.UserPolicyBreakdown object at 0x7efc7103b250>
2020-10-01 17:48:49,681 sdxcontroller.rulemanager: 139622684415744 DEBUG L2MultipointEndpointLCRule: switch 203, 8:([1]), ([(12, 1423)]), 1, 8000
2020-10-01 17:48:49,682 sdxcontroller.rulemanager: 139622684415744 DEBUG Sending install breakdown: <shared.UserPolicy.UserPolicyBreakdown object at 0x7efc7103b290>
2020-10-01 17:48:49,682 sdxcontroller.rulemanager: 139622684415744 DEBUG L2MultipointEndpointLCRule: switch 205, 8:([23]), ([(8, 1425)]), 1, 8000
2020-10-01 17:48:49,683 sdxcontroller.rulemanager: 139622684415744 DEBUG Sending install breakdown: <shared.UserPolicy.UserPolicyBreakdown object at 0x7efc71032b10>
2020-10-01 17:48:49,683 sdxcontroller.rulemanager: 139622684415744 DEBUG L2MultipointEndpointLCRule: switch 204, 8:([1]), ([(12, 1424)]), 1, 8000
2020-10-01 17:48:49,684 sdxcontroller.rulemanager: 139622684415744 DEBUG Sending install breakdown: <shared.UserPolicy.UserPolicyBreakdown object at 0x7efc71032f90>
2020-10-01 17:48:49,684 sdxcontroller.rulemanager: 139622684415744 DEBUG L2MultipointEndpointLCRule: switch 202, 8:([1, 2]), ([(12, 1422)]), 1, 8000
2020-10-01 17:48:49,685 sdxcontroller.rulemanager: 139622684415744 DEBUG Sending install breakdown: <shared.UserPolicy.UserPolicyBreakdown object at 0x7efc71032a90>
2020-10-01 17:48:49,686 sdxcontroller.rulemanager: 139622684415744 DEBUG L2MultipointFloodLCRule: switch 201, 8:([23, 2, 1]), 1
P2MP Tree created:

Connectivity between end host pairs:
renci2 duke unc ncsu
renci2. -- ok ok no
duke ok -- ok ok
unc ok ok -- no
ncsu no ok no --
Flow table of br22 in dukes1:
corsa-1# show openflow flow br22 full
count : 25
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| table | prio | match | actions | cookie | packets |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 0 | 0 | - | goto_table:1 | 0x0 | 2282 | 147182 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 0 | 100 | in_port=1,dl_vlan=1411 | output:2,output:11 | 0x0 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 0 | 100 | in_port=2,dl_vlan=1411 | output:1,output:11 | 0x0 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 0 | 100 | in_port=11,dl_vlan=1411 | output:1,output:2 | 0x0 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 0 | 1 | in_port=12,dl_vlan=1422 | set_field:4097->vlan_vid, | 0x4 |
| | | | goto_table:1 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 1 | 0 | - | goto_table:2 | 0x0 | 2306 | 149348 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 2 | 0 | - | goto_table:3 | 0x0 | 2306 | 149348 | +-------+-------+---------------------------+---------------------------+--------+---------+--------
| 3 | 0 | - | goto_table:4 | 0x0 | 2282 | 147182 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 3 | 0 | in_port=11 | CONTROLLER:65509, | 0x3 | 0 |
| | | | goto_table:4 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+-------
| 3 | 0 | in_port=12 | CONTROLLER:65509, | 0x2 | 0 |
| | | | goto_table:4 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 3 | 2 | in_port=12,dl_vlan=1 | CONTROLLER:65509, | 0x4 |
| | | | goto_table:4 | | | | | +-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 0 | - | clear_actions | 0x0 | 0 | 0 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 0 | in_port=1 | clear_actions | 0x0 | 0 | 0 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 1 | in_port=1, | output:2,output:11, | 0x1 | 0 | 0
| | | dl_dst=ff:ff:ff:ff:ff:ff | output:12 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 3 | in_port=1,dl_vlan=1 | output:2, | 0x4 | 35 |
| | | | set_field:5518->vlan_vid, | | | |
| | | | output:12 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 4 | in_port=1,dl_vlan=1, | output:2, | 0x4 | 1126 |
| | | dl_dst=ff:ff:ff:ff:ff:ff | set_field:5518->vlan_vid, | | | |
| | | | output:12 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 0 | in_port=2 | clear_actions | 0x0 | 0 | 0 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 1 | in_port=2, | output:1,output:11, | 0x1 | 0 | 0
| | | dl_dst=ff:ff:ff:ff:ff:ff | output:12 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 3 | in_port=2,dl_vlan=1 | output:1, | 0x4 | 11 |
| | | | set_field:5518->vlan_vid, | | | |
| | | | output:12 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 4 | in_port=2,dl_vlan=1, | output:1, | 0x4 | 1110 |
| | | dl_dst=ff:ff:ff:ff:ff:ff | set_field:5518->vlan_vid, | | | |
| | | | output:12 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 0 | in_port=11 | clear_actions | 0x0 | 0 | 0 |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 1 | in_port=11, | output:1,output:2, | 0x1 | 0 | 0
| | | dl_dst=ff:ff:ff:ff:ff:ff | output:12 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 1 | in_port=12, | output:1,output:2, | 0x1 | 0 | 0
| | | dl_dst=ff:ff:ff:ff:ff:ff | output:11 | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 3 | in_port=12,dl_vlan=1 | output:1,output:2 | 0x4 | 24 | +-------+-------+---------------------------+---------------------------+--------+---------+--------
| 4 | 4 | in_port=12,dl_vlan=1, | output:1,output:2 | 0x4 | 0 |
| | | dl_dst=ff:ff:ff:ff:ff:ff | | | | | |
+-------+-------+---------------------------+---------------------------+--------+---------+--------
Multipoint request on renci testbed that includes 4 sites. Duke is not correctly forwarding traffic to/from NCSU.
In this example, Duke is both endpoint switch and tree node (see the diagram below), the code here in L2MultipointPolicy.py, first checks the endpoint switch, which is skipped in the following tree nodes breakdown rule.
atlanticwave-proto/shared/L2MultipointPolicy.py
Line 216 in 88f5f47
L2MultipointEndpointLCRule does generate a set of flood ports to flood the traffic, so need to check the detailed flow entries.
Request:
Tree structure:
Rules:
P2MP Tree created:
Connectivity between end host pairs:
Flow table of br22 in dukes1: