blob: e8c8890b849bda275c9696a31ebd8a783c296446 [file] [log] [blame]
Shad Ansari1106b022019-01-16 22:22:35 -08001/*
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 "encoding/binary"
21 "errors"
Shad Ansari53935c02019-01-17 16:41:45 -080022 "log"
Keita NISHIMOTO21853b32019-01-25 19:29:59 +090023 "fmt"
Shad Ansari1106b022019-01-16 22:22:35 -080024)
25
26type OmciMsgHandler func(class OmciClass, content OmciContent, key OnuKey) ([]byte, error)
27
28var Handlers = map[OmciMsgType]OmciMsgHandler{
29 MibReset: mibReset,
30 MibUpload: mibUpload,
31 MibUploadNext: mibUploadNext,
32 Set: set,
33 Create: create,
34 Get: get,
35 GetAllAlarms: getAllAlarms,
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -080036 GetAllAlarmsNext: getAllAlarmsNext,
37 SynchronizeTime: syncTime,
Shad Ansari1106b022019-01-16 22:22:35 -080038}
39
40func mibReset(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
41 var pkt []byte
42
Mahir Gunyeled7b07b2019-02-11 12:06:02 -080043 log.Printf("%v - Omci MibReset",key)
44 if state, ok := OnuOmciStateMap[key]; ok{
45 log.Printf("%v - Reseting OnuOmciState",key)
46 state.ResetOnuOmciState()
47 }
Shad Ansari1106b022019-01-16 22:22:35 -080048
49 pkt = []byte{
50 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
56 return pkt, nil
57}
58
59func mibUpload(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
60 var pkt []byte
61
Mahir Gunyeled7b07b2019-02-11 12:06:02 -080062 log.Printf("%v - Omci MibUpload",key)
Shad Ansari1106b022019-01-16 22:22:35 -080063
64 pkt = []byte{
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
67 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
71
72 pkt[9] = NumMibUploads // Number of subsequent MibUploadNext cmds
73
74 return pkt, nil
75}
76
77func mibUploadNext(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
78 var pkt []byte
79
80 state := OnuOmciStateMap[key]
81
Mahir Gunyeled7b07b2019-02-11 12:06:02 -080082 log.Printf("%v - Omci MibUploadNext %d", key, state.mibUploadCtr)
Shad Ansari1106b022019-01-16 22:22:35 -080083
84 switch state.mibUploadCtr {
85 case 0:
86 // ONT Data (2)
87 pkt = []byte{
88 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
89 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
90 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
94 case 1:
95 // Circuit Pack (6) - #1
96 pkt = []byte{
97 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
98 0x00, 0x06, 0x01, 0x01, 0xf0, 0x00, 0x2f, 0x04,
99 0x49, 0x53, 0x4b, 0x54, 0x71, 0xe8, 0x00, 0x80,
100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
103 case 2:
104 // Circuit Pack (6) - #2
105 pkt = []byte{
106 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
107 0x00, 0x06, 0x01, 0x01, 0x0f, 0x00, 0x42, 0x52,
108 0x43, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
112 case 3:
113 // Circuit Pack (6) - #3
114 pkt = []byte{
115 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
116 0x00, 0x06, 0x01, 0x01, 0x00, 0xf8, 0x20, 0x20,
117 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
118 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
119 0x20, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
121 case 4:
122 // Circuit Pack (6) - #4
123 pkt = []byte{
124 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
125 0x00, 0x06, 0x01, 0x01, 0x00, 0x04, 0x00, 0x00,
126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
130 case 5:
131 // Circuit Pack (6) - #5
132 pkt = []byte{
133 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
134 0x00, 0x06, 0x01, 0x80, 0xf0, 0x00, 0xee, 0x01,
135 0x49, 0x53, 0x4b, 0x54, 0x71, 0xe8, 0x00, 0x80,
136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
139 case 6:
140 // Circuit Pack (6) - #6
141 pkt = []byte{
142 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
143 0x00, 0x06, 0x01, 0x80, 0x0f, 0x00, 0x42, 0x52,
144 0x43, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
148 case 7:
149 // Circuit Pack (6) - #7
150 pkt = []byte{
151 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
152 0x00, 0x06, 0x01, 0x80, 0x00, 0xf8, 0x20, 0x20,
153 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
154 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
155 0x20, 0x20, 0x00, 0x08, 0x40, 0x10, 0x00, 0x00,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
157 case 8:
158 // Circuit Pack (6) - #8
159 pkt = []byte{
160 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
161 0x00, 0x06, 0x01, 0x80, 0x00, 0x04, 0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
166 case 9, 10, 11, 12:
167 // PPTP (11)
168 pkt = []byte{
169 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
170 0x00, 0x0b, 0x01, 0x01, 0xff, 0xfe, 0x00, 0x2f,
171 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0xee, 0x00,
172 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
175 pkt[11] = state.pptpInstance // ME Instance
176 state.pptpInstance++
177 case 13, 14, 15, 16, 17, 18, 19, 20:
178 // T-CONT (262)
179 pkt = []byte{
180 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
181 0x01, 0x06, 0x80, 0x00, 0xe0, 0x00, 0xff, 0xff,
182 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
186 pkt[11] = state.tcontInstance // TCONT ME Instance
187 state.tcontInstance++
188 case 21:
189 // ANI-G (263)
190 pkt = []byte{
191 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
192 0x01, 0x07, 0x80, 0x01, 0xff, 0xff, 0x01, 0x00,
193 0x08, 0x00, 0x30, 0x00, 0x00, 0x05, 0x09, 0x00,
194 0x00, 0xe0, 0x54, 0xff, 0xff, 0x00, 0x00, 0x0c,
195 0x63, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00,
196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
197 case 22, 23, 24, 25:
198 // UNI-G (264)
199 pkt = []byte{
200 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
201 0x01, 0x08, 0x01, 0x01, 0xf8, 0x00, 0x00, 0x00,
202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
206 pkt[11] = state.uniGInstance // UNI-G ME Instance
207 state.uniGInstance++
208 default:
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800209 state.extraMibUploadCtr++
210 errstr := fmt.Sprintf("%v - Invalid MibUpload request: %d, extras: %d", key, state.mibUploadCtr, state.extraMibUploadCtr)
Keita NISHIMOTO21853b32019-01-25 19:29:59 +0900211 return nil, errors.New(errstr)
Shad Ansari1106b022019-01-16 22:22:35 -0800212 }
213
214 state.mibUploadCtr++
215 return pkt, nil
216}
217
218func set(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
219 var pkt []byte
220
221 pkt = []byte{
222 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
227 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
228
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800229 log.Printf("%v - Omci Set",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800230
231 return pkt, nil
232}
233
234func create(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
235 var pkt []byte
236
237 if class == GEMPortNetworkCTP {
238 if onuOmciState, ok := OnuOmciStateMap[key]; !ok {
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800239 log.Printf("%v - ONU Key Error",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800240 return nil, errors.New("ONU Key Error")
241 } else {
242 onuOmciState.gemPortId = binary.BigEndian.Uint16(content[:2])
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800243 log.Printf("%v - Gem Port Id %d", key, onuOmciState.gemPortId)
Shad Ansari1106b022019-01-16 22:22:35 -0800244 // FIXME
245 OnuOmciStateMap[key].state = DONE
246 }
247 }
248
249 pkt = []byte{
250 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x01,
251 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
254 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
256
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800257 log.Printf("%v - Omci Create",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800258
259 return pkt, nil
260}
261
262func get(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
263 var pkt []byte
264
265 pkt = []byte{
266 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x02, 0x01,
267 0x00, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
269 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
272
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800273 log.Printf("%v - Omci Get",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800274
275 return pkt, nil
276}
277
278func getAllAlarms(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
279 var pkt []byte
280
281 pkt = []byte{
282 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
283 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
286 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
287 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
288
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800289 log.Printf("%v - Omci GetAllAlarms",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800290
291 return pkt, nil
292}
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800293
294
295func syncTime(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
296 var pkt []byte
297
298 pkt = []byte{
299 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
300 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
301 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
302 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
303 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
304 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
305
306 log.Printf("%v - Omci syncTime",key)
307
308 return pkt, nil
309}
310
311func getAllAlarmsNext(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
312 var pkt []byte
313
314 pkt = []byte{
315 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
316 0x00, 0x0b, 0x01, 0x02, 0x80, 0x00, 0x00, 0x00,
317 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
318 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
320 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
321
322 log.Printf("%v - Omci GetAllAlarmsNext",key)
323
324 return pkt, nil
325}