VOL-3121 - Separated ports from devices.
Similar to flows/groups/meters/logical ports.
Also added ListDevicePorts and GetDevicePort to the adapter API.
Also removed unused `// +build integration` tests.
Change-Id: I586adb9f46a249c9430d4205ef5db2d105dbbe06
diff --git a/rw_core/flowdecomposition/flow_decomposer_test.go b/rw_core/flowdecomposition/flow_decomposer_test.go
index 80ff313..ea560e2 100644
--- a/rw_core/flowdecomposition/flow_decomposer_test.go
+++ b/rw_core/flowdecomposition/flow_decomposer_test.go
@@ -32,56 +32,58 @@
type testDeviceManager struct {
mocks.DeviceManager
- devices map[string]*voltha.Device
+ devices map[string]*voltha.Device
+ devicePorts map[string]map[uint32]*voltha.Port
}
func newTestDeviceManager() *testDeviceManager {
var tdm testDeviceManager
tdm.devices = make(map[string]*voltha.Device)
+ tdm.devicePorts = make(map[string]map[uint32]*voltha.Port)
tdm.devices["olt"] = &voltha.Device{
Id: "olt",
Root: true,
ParentId: "logical_device",
- Ports: []*voltha.Port{
- {PortNo: 1, Label: "pon"},
- {PortNo: 2, Label: "nni"},
- },
+ }
+ tdm.devicePorts["olt"] = map[uint32]*voltha.Port{
+ 1: {PortNo: 1, Label: "pon"},
+ 2: {PortNo: 2, Label: "nni"},
}
tdm.devices["onu1"] = &voltha.Device{
Id: "onu1",
Root: false,
ParentId: "olt",
- Ports: []*voltha.Port{
- {PortNo: 1, Label: "pon"},
- {PortNo: 2, Label: "uni"},
- },
+ }
+ tdm.devicePorts["onu1"] = map[uint32]*voltha.Port{
+ 1: {PortNo: 1, Label: "pon"},
+ 2: {PortNo: 2, Label: "uni"},
}
tdm.devices["onu2"] = &voltha.Device{
Id: "onu2",
Root: false,
ParentId: "olt",
- Ports: []*voltha.Port{
- {PortNo: 1, Label: "pon"},
- {PortNo: 2, Label: "uni"},
- },
+ }
+ tdm.devicePorts["onu2"] = map[uint32]*voltha.Port{
+ 1: {PortNo: 1, Label: "pon"},
+ 2: {PortNo: 2, Label: "uni"},
}
tdm.devices["onu3"] = &voltha.Device{
Id: "onu3",
Root: false,
ParentId: "olt",
- Ports: []*voltha.Port{
- {PortNo: 1, Label: "pon"},
- {PortNo: 2, Label: "uni"},
- },
+ }
+ tdm.devicePorts["onu3"] = map[uint32]*voltha.Port{
+ 1: {PortNo: 1, Label: "pon"},
+ 2: {PortNo: 2, Label: "uni"},
}
tdm.devices["onu4"] = &voltha.Device{
Id: "onu4",
Root: false,
ParentId: "olt",
- Ports: []*voltha.Port{
- {PortNo: 1, Label: "pon"},
- {PortNo: 2, Label: "uni"},
- },
+ }
+ tdm.devicePorts["onu4"] = map[uint32]*voltha.Port{
+ 1: {PortNo: 1, Label: "pon"},
+ 2: {PortNo: 2, Label: "uni"},
}
return &tdm
}
@@ -92,6 +94,13 @@
}
return nil, errors.New("ABSENT")
}
+func (tdm *testDeviceManager) listDevicePorts(ctx context.Context, deviceID string) (map[uint32]*voltha.Port, error) {
+ ports, have := tdm.devicePorts[deviceID]
+ if !have {
+ return nil, errors.New("ABSENT")
+ }
+ return ports, nil
+}
func (tdm *testDeviceManager) IsRootDevice(deviceID string) (bool, error) {
if d, ok := tdm.devices[deviceID]; ok {
return d.Root, nil
@@ -134,62 +143,62 @@
tfd.routes[route.OFPortLink{Ingress: 10, Egress: 1}] = []route.Hop{
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "onu1",
- Ingress: tfd.dMgr.devices["onu1"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["onu1"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 10, Egress: 2}] = []route.Hop{
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "onu2",
- Ingress: tfd.dMgr.devices["onu2"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["onu2"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 10, Egress: 3}] = []route.Hop{
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "onu3",
- Ingress: tfd.dMgr.devices["onu3"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["onu3"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 10, Egress: 4}] = []route.Hop{
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "onu4",
- Ingress: tfd.dMgr.devices["onu4"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["onu4"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 10, Egress: 10}] = []route.Hop{
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 2,
+ Egress: 2,
},
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 2,
+ Egress: 2,
},
}
@@ -198,49 +207,49 @@
tfd.routes[route.OFPortLink{Ingress: 1, Egress: 10}] = []route.Hop{
{
DeviceID: "onu1",
- Ingress: tfd.dMgr.devices["onu1"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["onu1"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 2, Egress: 10}] = []route.Hop{
{
DeviceID: "onu2",
- Ingress: tfd.dMgr.devices["onu2"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["onu2"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 3, Egress: 10}] = []route.Hop{
{
DeviceID: "onu3",
- Ingress: tfd.dMgr.devices["onu3"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["onu3"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 4, Egress: 10}] = []route.Hop{
{
DeviceID: "onu4",
- Ingress: tfd.dMgr.devices["onu4"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["onu4"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
@@ -250,49 +259,49 @@
tfd.routes[route.OFPortLink{Ingress: 1, Egress: 0}] = []route.Hop{
{
DeviceID: "onu1",
- Ingress: tfd.dMgr.devices["onu1"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["onu1"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 2, Egress: 0}] = []route.Hop{
{
DeviceID: "onu2",
- Ingress: tfd.dMgr.devices["onu2"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["onu2"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 3, Egress: 0}] = []route.Hop{
{
DeviceID: "onu3",
- Ingress: tfd.dMgr.devices["onu3"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["onu3"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
tfd.routes[route.OFPortLink{Ingress: 4, Egress: 0}] = []route.Hop{
{
DeviceID: "onu4",
- Ingress: tfd.dMgr.devices["onu4"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["onu4"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
@@ -301,8 +310,8 @@
tfd.routes[route.OFPortLink{Ingress: 10, Egress: 0}] = []route.Hop{
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
+ Ingress: 2,
+ Egress: 1,
},
{}, // 2nd hop is not known yet
}
@@ -311,8 +320,8 @@
{}, // 1st hop is wildcard
{
DeviceID: "olt",
- Ingress: tfd.dMgr.devices["olt"].Ports[0].PortNo,
- Egress: tfd.dMgr.devices["olt"].Ports[1].PortNo,
+ Ingress: 1,
+ Egress: 2,
},
}
@@ -384,7 +393,7 @@
tfd.defaultRules.AddFlowsAndGroup("onu4", fg)
//Set up the device graph - flow decomposer uses it only to verify whether a port is a root port.
- tfd.deviceRoutes = route.NewDeviceRoutes(context.Background(), "ldid", tfd.getDeviceHelper)
+ tfd.deviceRoutes = route.NewDeviceRoutes("ldid", "olt", tfd.dMgr.listDevicePorts)
tfd.deviceRoutes.RootPorts = make(map[uint32]uint32)
tfd.deviceRoutes.RootPorts[10] = 10
@@ -393,10 +402,6 @@
return &tfd
}
-func (tfd *testFlowDecomposer) getDeviceHelper(ctx context.Context, deviceID string) (*voltha.Device, error) {
- return tfd.dMgr.GetDevice(ctx, &voltha.ID{Id: deviceID})
-}
-
func (tfd *testFlowDecomposer) GetDeviceLogicalID() string {
return ""
}