blob: d98cbeb567b52910715e34fd88326fc50acb18b8 [file] [log] [blame]
Girish Gowdra64503432020-01-07 10:59:10 +05301/*
2 * Copyright 2018-present Open Networking Foundation
3
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7
8 * http://www.apache.org/licenses/LICENSE-2.0
9
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package core
18
19import (
20 "errors"
Girish Gowdrad4bdd372020-03-09 14:56:15 -070021 "strings"
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +053022
Girish Gowdra64503432020-01-07 10:59:10 +053023 "github.com/opencord/openolt-scale-tester/config"
Girish Gowdra5d7d6442020-09-08 17:03:11 -070024 "github.com/opencord/voltha-lib-go/v4/pkg/log"
25 oop "github.com/opencord/voltha-protos/v4/go/openolt"
26 tp_pb "github.com/opencord/voltha-protos/v4/go/tech_profile"
Girish Gowdra64503432020-01-07 10:59:10 +053027 "golang.org/x/net/context"
28 "google.golang.org/grpc/codes"
29 "google.golang.org/grpc/status"
30)
31
Girish Gowdra64503432020-01-07 10:59:10 +053032// A dummy struct to comply with the WorkFlow interface.
33type AttWorkFlow struct {
34}
35
Girish Gowdraef1b7c42020-01-23 16:27:48 +053036func AddDhcpIPV4Flow(oo oop.OpenoltClient, config *config.OpenOltScaleTesterConfig, rsrMgr *OpenOltResourceMgr) error {
Girish Gowdra5d7d6442020-09-08 17:03:11 -070037 var flowID uint64
Girish Gowdra64503432020-01-07 10:59:10 +053038 var err error
39
Girish Gowdraaeceb842020-08-21 12:10:39 -070040 if flowID, err = rsrMgr.GetFlowID(context.Background(), uint32(config.NniIntfID)); err != nil {
Girish Gowdra64503432020-01-07 10:59:10 +053041 return err
42 }
43
Girish Gowdraef1b7c42020-01-23 16:27:48 +053044 // DHCP IPV4
Girish Gowdra64503432020-01-07 10:59:10 +053045 flowClassifier := &oop.Classifier{EthType: 2048, IpProto: 17, SrcPort: 67, DstPort: 68, PktTagType: "double_tag"}
46 actionCmd := &oop.ActionCmd{TrapToHost: true}
47 actionInfo := &oop.Action{Cmd: actionCmd}
48
Girish Gowdraaeceb842020-08-21 12:10:39 -070049 flow := oop.Flow{AccessIntfId: -1, OnuId: -1, UniId: -1, FlowId: flowID,
Girish Gowdra64503432020-01-07 10:59:10 +053050 FlowType: "downstream", AllocId: -1, GemportId: -1,
51 Classifier: flowClassifier, Action: actionInfo,
Girish Gowdraef1b7c42020-01-23 16:27:48 +053052 Priority: 1000, PortNo: uint32(config.NniIntfID)}
Girish Gowdra64503432020-01-07 10:59:10 +053053
54 _, err = oo.FlowAdd(context.Background(), &flow)
55
56 st, _ := status.FromError(err)
57 if st.Code() == codes.AlreadyExists {
Girish Gowdra5d7d6442020-09-08 17:03:11 -070058 logger.Debugw(nil, "Flow already exists", log.Fields{"err": err, "deviceFlow": flow})
Girish Gowdra64503432020-01-07 10:59:10 +053059 return nil
60 }
61
62 if err != nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -070063 logger.Errorw(nil, "Failed to Add DHCP IPv4 to device", log.Fields{"err": err, "deviceFlow": flow})
Girish Gowdra64503432020-01-07 10:59:10 +053064 return err
65 }
Girish Gowdra5d7d6442020-09-08 17:03:11 -070066 logger.Debugw(nil, "DHCP IPV4 added to device successfully ", log.Fields{"flow": flow})
Girish Gowdraef1b7c42020-01-23 16:27:48 +053067
68 return nil
69}
70
71func AddDhcpIPV6Flow(oo oop.OpenoltClient, config *config.OpenOltScaleTesterConfig, rsrMgr *OpenOltResourceMgr) error {
Girish Gowdra5d7d6442020-09-08 17:03:11 -070072 var flowID uint64
Girish Gowdraef1b7c42020-01-23 16:27:48 +053073 var err error
74
Girish Gowdraaeceb842020-08-21 12:10:39 -070075 if flowID, err = rsrMgr.GetFlowID(context.Background(), uint32(config.NniIntfID)); err != nil {
Girish Gowdraef1b7c42020-01-23 16:27:48 +053076 return err
77 }
78
79 // DHCP IPV6
80 flowClassifier := &oop.Classifier{EthType: 34525, IpProto: 17, SrcPort: 546, DstPort: 547, PktTagType: "double_tag"}
81 actionCmd := &oop.ActionCmd{TrapToHost: true}
82 actionInfo := &oop.Action{Cmd: actionCmd}
83
Girish Gowdraaeceb842020-08-21 12:10:39 -070084 flow := oop.Flow{AccessIntfId: -1, OnuId: -1, UniId: -1, FlowId: flowID,
Girish Gowdraef1b7c42020-01-23 16:27:48 +053085 FlowType: "downstream", AllocId: -1, GemportId: -1,
86 Classifier: flowClassifier, Action: actionInfo,
87 Priority: 1000, PortNo: uint32(config.NniIntfID)}
88
89 _, err = oo.FlowAdd(context.Background(), &flow)
90
91 st, _ := status.FromError(err)
92 if st.Code() == codes.AlreadyExists {
Girish Gowdra5d7d6442020-09-08 17:03:11 -070093 logger.Debugw(nil, "Flow already exists", log.Fields{"err": err, "deviceFlow": flow})
Girish Gowdraef1b7c42020-01-23 16:27:48 +053094 return nil
95 }
96
97 if err != nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -070098 logger.Errorw(nil, "Failed to Add DHCP IPV6 to device", log.Fields{"err": err, "deviceFlow": flow})
Girish Gowdraef1b7c42020-01-23 16:27:48 +053099 return err
100 }
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700101 logger.Debugw(nil, "DHCP IPV6 added to device successfully ", log.Fields{"flow": flow})
Girish Gowdraef1b7c42020-01-23 16:27:48 +0530102
103 return nil
104}
105
Girish Gowdraef1b7c42020-01-23 16:27:48 +0530106func ProvisionAttNniTrapFlow(oo oop.OpenoltClient, config *config.OpenOltScaleTesterConfig, rsrMgr *OpenOltResourceMgr) error {
107 _ = AddDhcpIPV4Flow(oo, config, rsrMgr)
108 _ = AddDhcpIPV6Flow(oo, config, rsrMgr)
109 _ = AddLldpFlow(oo, config, rsrMgr)
Girish Gowdra64503432020-01-07 10:59:10 +0530110
111 return nil
112}
113
Girish Gowdra64503432020-01-07 10:59:10 +0530114func (att AttWorkFlow) ProvisionScheds(subs *Subscriber) error {
115 var trafficSched []*tp_pb.TrafficScheduler
116
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700117 logger.Info(nil, "provisioning-scheds")
Girish Gowdra64503432020-01-07 10:59:10 +0530118
119 if trafficSched = getTrafficSched(subs, tp_pb.Direction_DOWNSTREAM); trafficSched == nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700120 logger.Error(nil, "ds-traffic-sched-is-nil")
Girish Gowdra64503432020-01-07 10:59:10 +0530121 return errors.New(ReasonCodeToReasonString(SCHED_CREATION_FAILED))
122 }
123
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700124 logger.Debugw(nil, "Sending Traffic scheduler create to device",
Girish Gowdra64503432020-01-07 10:59:10 +0530125 log.Fields{"Direction": tp_pb.Direction_DOWNSTREAM, "TrafficScheds": trafficSched})
126 if _, err := subs.OpenOltClient.CreateTrafficSchedulers(context.Background(), &tp_pb.TrafficSchedulers{
127 IntfId: subs.PonIntf, OnuId: subs.OnuID,
128 UniId: subs.UniID, PortNo: subs.UniPortNo,
129 TrafficScheds: trafficSched}); err != nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700130 logger.Errorw(nil, "Failed to create traffic schedulers", log.Fields{"error": err})
Girish Gowdra64503432020-01-07 10:59:10 +0530131 return errors.New(ReasonCodeToReasonString(SCHED_CREATION_FAILED))
132 }
133
134 if trafficSched = getTrafficSched(subs, tp_pb.Direction_UPSTREAM); trafficSched == nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700135 logger.Error(nil, "us-traffic-sched-is-nil")
Girish Gowdra64503432020-01-07 10:59:10 +0530136 return errors.New(ReasonCodeToReasonString(SCHED_CREATION_FAILED))
137 }
138
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700139 logger.Debugw(nil, "Sending Traffic scheduler create to device",
Girish Gowdra64503432020-01-07 10:59:10 +0530140 log.Fields{"Direction": tp_pb.Direction_UPSTREAM, "TrafficScheds": trafficSched})
141 if _, err := subs.OpenOltClient.CreateTrafficSchedulers(context.Background(), &tp_pb.TrafficSchedulers{
142 IntfId: subs.PonIntf, OnuId: subs.OnuID,
143 UniId: subs.UniID, PortNo: subs.UniPortNo,
144 TrafficScheds: trafficSched}); err != nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700145 logger.Errorw(nil, "Failed to create traffic schedulers", log.Fields{"error": err})
Girish Gowdra64503432020-01-07 10:59:10 +0530146 return errors.New(ReasonCodeToReasonString(SCHED_CREATION_FAILED))
147 }
Girish Gowdra64503432020-01-07 10:59:10 +0530148 return nil
149}
150
Girish Gowdra64503432020-01-07 10:59:10 +0530151func (att AttWorkFlow) ProvisionQueues(subs *Subscriber) error {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700152 logger.Info(nil, "provisioning-queues")
Girish Gowdra64503432020-01-07 10:59:10 +0530153
154 var trafficQueues []*tp_pb.TrafficQueue
155 if trafficQueues = getTrafficQueues(subs, tp_pb.Direction_DOWNSTREAM); trafficQueues == nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700156 logger.Error(nil, "Failed to create traffic queues")
Girish Gowdra64503432020-01-07 10:59:10 +0530157 return errors.New(ReasonCodeToReasonString(QUEUE_CREATION_FAILED))
158 }
159
160 // On receiving the CreateTrafficQueues request, the driver should create corresponding
161 // downstream queues.
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700162 logger.Debugw(nil, "Sending Traffic Queues create to device",
Girish Gowdra64503432020-01-07 10:59:10 +0530163 log.Fields{"Direction": tp_pb.Direction_DOWNSTREAM, "TrafficQueues": trafficQueues})
164 if _, err := subs.OpenOltClient.CreateTrafficQueues(context.Background(),
165 &tp_pb.TrafficQueues{IntfId: subs.PonIntf, OnuId: subs.OnuID,
166 UniId: subs.UniID, PortNo: subs.UniPortNo,
167 TrafficQueues: trafficQueues}); err != nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700168 logger.Errorw(nil, "Failed to create traffic queues in device", log.Fields{"error": err})
Girish Gowdra64503432020-01-07 10:59:10 +0530169 return errors.New(ReasonCodeToReasonString(QUEUE_CREATION_FAILED))
170 }
171
172 if trafficQueues = getTrafficQueues(subs, tp_pb.Direction_UPSTREAM); trafficQueues == nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700173 logger.Error(nil, "Failed to create traffic queues")
Girish Gowdra64503432020-01-07 10:59:10 +0530174 return errors.New(ReasonCodeToReasonString(QUEUE_CREATION_FAILED))
175 }
176
177 // On receiving the CreateTrafficQueues request, the driver should create corresponding
178 // upstream queues.
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700179 logger.Debugw(nil, "Sending Traffic Queues create to device",
Girish Gowdra64503432020-01-07 10:59:10 +0530180 log.Fields{"Direction": tp_pb.Direction_UPSTREAM, "TrafficQueues": trafficQueues})
181 if _, err := subs.OpenOltClient.CreateTrafficQueues(context.Background(),
182 &tp_pb.TrafficQueues{IntfId: subs.PonIntf, OnuId: subs.OnuID,
183 UniId: subs.UniID, PortNo: subs.UniPortNo,
184 TrafficQueues: trafficQueues}); err != nil {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700185 logger.Errorw(nil, "Failed to create traffic queues in device", log.Fields{"error": err})
Girish Gowdra64503432020-01-07 10:59:10 +0530186 return errors.New(ReasonCodeToReasonString(QUEUE_CREATION_FAILED))
187 }
188
189 return nil
190}
191
192func (att AttWorkFlow) ProvisionEapFlow(subs *Subscriber) error {
Girish Gowdra64503432020-01-07 10:59:10 +0530193 var err error
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700194 var flowID uint64
Girish Gowdra64503432020-01-07 10:59:10 +0530195 var gemPortIDs []uint32
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700196 pbitToGem := make(map[uint32]uint32)
Girish Gowdra64503432020-01-07 10:59:10 +0530197
198 var allocID = subs.TpInstance[subs.TestConfig.TpIDList[0]].UsScheduler.AllocID
Girish Gowdra64503432020-01-07 10:59:10 +0530199 for _, gem := range subs.TpInstance[subs.TestConfig.TpIDList[0]].UpstreamGemPortAttributeList {
200 gemPortIDs = append(gemPortIDs, gem.GemportID)
201 }
202
Girish Gowdrad4bdd372020-03-09 14:56:15 -0700203 for idx, gemID := range gemPortIDs {
204 pBitMap := subs.TpInstance[subs.TestConfig.TpIDList[0]].UpstreamGemPortAttributeList[idx].PbitMap
205 for pos, pbitSet := range strings.TrimPrefix(pBitMap, "0b") {
206 if pbitSet == '1' {
207 pcp := uint32(len(strings.TrimPrefix(pBitMap, "0b"))) - 1 - uint32(pos)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700208 pbitToGem[pcp] = gemID
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +0530209 }
Girish Gowdra64503432020-01-07 10:59:10 +0530210 }
Girish Gowdra64503432020-01-07 10:59:10 +0530211 }
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700212 // This flowID is not the BAL flow ID now, it is the voltha-flow-id
213 if flowID, err = subs.RsrMgr.GetFlowID(context.Background(), uint32(subs.PonIntf)); err != nil {
214 return errors.New(ReasonCodeToReasonString(FLOW_ID_GENERATION_FAILED))
215 }
216 if err := AddFlow(subs, EapolFlow, Upstream, flowID, allocID, 0, 0xff,
217 true, 0, pbitToGem); err != nil {
218 return err
219 }
220
Girish Gowdra64503432020-01-07 10:59:10 +0530221 return nil
222}
223
Girish Gowdraef1b7c42020-01-23 16:27:48 +0530224func (att AttWorkFlow) ProvisionDhcpIPV4Flow(subs *Subscriber) error {
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +0530225 var err error
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700226 var flowID uint64
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +0530227 var gemPortIDs []uint32
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700228 pbitToGem := make(map[uint32]uint32)
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +0530229
230 var allocID = subs.TpInstance[subs.TestConfig.TpIDList[0]].UsScheduler.AllocID
231 for _, gem := range subs.TpInstance[subs.TestConfig.TpIDList[0]].UpstreamGemPortAttributeList {
232 gemPortIDs = append(gemPortIDs, gem.GemportID)
233 }
234
Girish Gowdrad4bdd372020-03-09 14:56:15 -0700235 for idx, gemID := range gemPortIDs {
236 pBitMap := subs.TpInstance[subs.TestConfig.TpIDList[0]].UpstreamGemPortAttributeList[idx].PbitMap
237 for pos, pbitSet := range strings.TrimPrefix(pBitMap, "0b") {
238 if pbitSet == '1' {
239 pcp := uint32(len(strings.TrimPrefix(pBitMap, "0b"))) - 1 - uint32(pos)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700240 pbitToGem[pcp] = gemID
Girish Gowdraef1b7c42020-01-23 16:27:48 +0530241 }
242 }
243 }
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700244
245 // This flowID is not the BAL flow ID now, it is the voltha-flow-id
246 if flowID, err = subs.RsrMgr.GetFlowID(context.Background(), uint32(subs.PonIntf)); err != nil {
247 return errors.New(ReasonCodeToReasonString(FLOW_ID_GENERATION_FAILED))
248 }
249 if err := AddFlow(subs, DhcpFlowIPV4, Upstream, flowID, allocID, 0, 0xff,
250 true, 0, pbitToGem); err != nil {
251 return err
252 }
Girish Gowdraef1b7c42020-01-23 16:27:48 +0530253 return nil
254}
255
256func (att AttWorkFlow) ProvisionDhcpIPV6Flow(subs *Subscriber) error {
257 var err error
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700258 var flowID uint64
Girish Gowdraef1b7c42020-01-23 16:27:48 +0530259 var gemPortIDs []uint32
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700260 pbitToGem := make(map[uint32]uint32)
Girish Gowdraef1b7c42020-01-23 16:27:48 +0530261
262 var allocID = subs.TpInstance[subs.TestConfig.TpIDList[0]].UsScheduler.AllocID
263 for _, gem := range subs.TpInstance[subs.TestConfig.TpIDList[0]].UpstreamGemPortAttributeList {
264 gemPortIDs = append(gemPortIDs, gem.GemportID)
265 }
266
Girish Gowdrad4bdd372020-03-09 14:56:15 -0700267 for idx, gemID := range gemPortIDs {
268 pBitMap := subs.TpInstance[subs.TestConfig.TpIDList[0]].UpstreamGemPortAttributeList[idx].PbitMap
269 for pos, pbitSet := range strings.TrimPrefix(pBitMap, "0b") {
270 if pbitSet == '1' {
271 pcp := uint32(len(strings.TrimPrefix(pBitMap, "0b"))) - 1 - uint32(pos)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700272 pbitToGem[pcp] = gemID
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +0530273 }
274 }
275 }
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700276
277 // This flowID is not the BAL flow ID now, it is the voltha-flow-id
278 if flowID, err = subs.RsrMgr.GetFlowID(context.Background(), uint32(subs.PonIntf)); err != nil {
279 return errors.New(ReasonCodeToReasonString(FLOW_ID_GENERATION_FAILED))
280 }
281 if err := AddFlow(subs, DhcpFlowIPV6, Upstream, flowID, allocID, 0, 0xff,
282 true, 0, pbitToGem); err != nil {
283 return err
284 }
Girish Gowdra64503432020-01-07 10:59:10 +0530285 return nil
286}
287
288func (att AttWorkFlow) ProvisionIgmpFlow(subs *Subscriber) error {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700289 logger.Info(nil, "att-workflow-does-not-support-igmp-yet--nothing-to-do")
Girish Gowdra64503432020-01-07 10:59:10 +0530290 return nil
291}
292
293func (att AttWorkFlow) ProvisionHsiaFlow(subs *Subscriber) error {
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +0530294 var err error
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700295 var flowIDUs, flowIDDs uint64
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +0530296 var gemPortIDs []uint32
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700297 pbitToGem := make(map[uint32]uint32)
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +0530298
299 var allocID = subs.TpInstance[subs.TestConfig.TpIDList[0]].UsScheduler.AllocID
300 for _, gem := range subs.TpInstance[subs.TestConfig.TpIDList[0]].UpstreamGemPortAttributeList {
301 gemPortIDs = append(gemPortIDs, gem.GemportID)
302 }
303
Girish Gowdrad4bdd372020-03-09 14:56:15 -0700304 for idx, gemID := range gemPortIDs {
305 pBitMap := subs.TpInstance[subs.TestConfig.TpIDList[0]].UpstreamGemPortAttributeList[idx].PbitMap
306 for pos, pbitSet := range strings.TrimPrefix(pBitMap, "0b") {
307 if pbitSet == '1' {
308 pcp := uint32(len(strings.TrimPrefix(pBitMap, "0b"))) - 1 - uint32(pos)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700309 pbitToGem[pcp] = gemID
Thiyagarajan Subramanib83b0432020-01-08 13:43:28 +0530310 }
311 }
312 }
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700313
314 // This flowID is not the BAL flow ID now, it is the voltha-flow-id
315 if flowIDUs, err = subs.RsrMgr.GetFlowID(context.Background(), uint32(subs.PonIntf)); err != nil {
316 return errors.New(ReasonCodeToReasonString(FLOW_ID_GENERATION_FAILED))
317 }
318 if err := AddFlow(subs, HsiaFlow, Upstream, flowIDUs, allocID, 0, 0xff,
319 true, 0, pbitToGem); err != nil {
320 return err
321 }
322 if flowIDDs, err = subs.RsrMgr.GetFlowID(context.Background(), uint32(subs.PonIntf)); err != nil {
323 return errors.New(ReasonCodeToReasonString(FLOW_ID_GENERATION_FAILED))
324 }
325 if err := AddFlow(subs, HsiaFlow, Downstream, flowIDDs, allocID, 0, 0xff,
326 true, flowIDUs, pbitToGem); err != nil {
327 return err
328 }
Girish Gowdra64503432020-01-07 10:59:10 +0530329 return nil
330}
Orhan Kupusoglu66b00d82020-03-13 12:06:33 +0300331
332func (att AttWorkFlow) ProvisionVoipFlow(subs *Subscriber) error {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700333 logger.Info(nil, "att-workflow-does-not-support-voip-yet--nothing-to-do")
Orhan Kupusoglu66b00d82020-03-13 12:06:33 +0300334 return nil
335}
336
337func (att AttWorkFlow) ProvisionVodFlow(subs *Subscriber) error {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700338 logger.Info(nil, "att-workflow-does-not-support-vod-yet--nothing-to-do")
Orhan Kupusoglu66b00d82020-03-13 12:06:33 +0300339 return nil
340}
341
342func (att AttWorkFlow) ProvisionMgmtFlow(subs *Subscriber) error {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700343 logger.Info(nil, "att-workflow-does-not-support-mgmt-yet--nothing-to-do")
Orhan Kupusoglu66b00d82020-03-13 12:06:33 +0300344 return nil
345}
346
347func (att AttWorkFlow) ProvisionMulticastFlow(subs *Subscriber) error {
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700348 logger.Info(nil, "att-workflow-does-not-support-multicast-yet--nothing-to-do")
Orhan Kupusoglu66b00d82020-03-13 12:06:33 +0300349 return nil
350}