blob: c766c1acd14fff58ad455a579b356166c5b6a504 [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"
Keita NISHIMOTO21853b32019-01-25 19:29:59 +090022 "fmt"
Matteo Scandoloa0026812019-08-20 11:01:32 -070023 log "github.com/sirupsen/logrus"
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{
Zdravko Bozakovf56cca42019-04-29 10:06:47 +020029 MibReset: mibReset,
30 MibUpload: mibUpload,
31 MibUploadNext: mibUploadNext,
32 Set: set,
33 Create: create,
34 Get: get,
35 GetAllAlarms: getAllAlarms,
36 GetAllAlarmsNext: getAllAlarmsNext,
37 SynchronizeTime: syncTime,
38 Delete: delete,
Zdravko Bozakov8e9d85a2019-05-27 21:02:59 +020039 Reboot: reboot,
Shad Ansari1106b022019-01-16 22:22:35 -080040}
41
42func mibReset(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
43 var pkt []byte
44
Matteo Scandoloa0026812019-08-20 11:01:32 -070045 log.WithFields(log.Fields{
46 "IntfId": key.IntfId,
47 "OnuId": key.OnuId,
48 }).Tracef("Omci MibReset")
Zdravko Bozakovf56cca42019-04-29 10:06:47 +020049 if state, ok := OnuOmciStateMap[key]; ok {
Matteo Scandoloa0026812019-08-20 11:01:32 -070050 log.WithFields(log.Fields{
51 "IntfId": key.IntfId,
52 "OnuId": key.OnuId,
53 }).Tracef("Reseting OnuOmciState")
Mahir Gunyeled7b07b2019-02-11 12:06:02 -080054 state.ResetOnuOmciState()
55 }
Shad Ansari1106b022019-01-16 22:22:35 -080056
57 pkt = []byte{
58 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
64 return pkt, nil
65}
66
67func mibUpload(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
68 var pkt []byte
69
Matteo Scandoloa0026812019-08-20 11:01:32 -070070 log.WithFields(log.Fields{
71 "IntfId": key.IntfId,
72 "OnuId": key.OnuId,
73 }).Tracef("Omci MibUpload")
Shad Ansari1106b022019-01-16 22:22:35 -080074
75 pkt = []byte{
76 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
77 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
82
Zdravko Bozakov3d762142019-07-15 16:57:17 +020083 pkt[8] = NumMibUploadsHigherByte
84 pkt[9] = NumMibUploadsLowerByte
Shad Ansari1106b022019-01-16 22:22:35 -080085
86 return pkt, nil
87}
88
89func mibUploadNext(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
90 var pkt []byte
91
92 state := OnuOmciStateMap[key]
93
Zdravko Bozakov8e9d85a2019-05-27 21:02:59 +020094 // commandNumber is the "Command number" attribute received in "MIB Upload Next" OMCI message
Zdravko Bozakov3d762142019-07-15 16:57:17 +020095 commandNumber := (uint16(content[1])) | (uint16(content[0])<<8)
Matteo Scandoloa0026812019-08-20 11:01:32 -070096 log.WithFields(log.Fields{
97 "IntfId": key.IntfId,
98 "OnuId": key.OnuId,
99 "CommandNumber": commandNumber,
100 }).Tracef("Omci MibUploadNext")
Shad Ansari1106b022019-01-16 22:22:35 -0800101
Zdravko Bozakov8e9d85a2019-05-27 21:02:59 +0200102 switch commandNumber {
Shad Ansari1106b022019-01-16 22:22:35 -0800103 case 0:
104 // ONT Data (2)
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200105 // log.Println("ONT DATA")
Shad Ansari1106b022019-01-16 22:22:35 -0800106 pkt = []byte{
107 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
108 0x00, 0x02, 0x00, 0x00, 0x80, 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 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
113 case 1:
114 // Circuit Pack (6) - #1
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200115 // log.Println("Circuit Pack")
Shad Ansari1106b022019-01-16 22:22:35 -0800116 pkt = []byte{
117 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
118 0x00, 0x06, 0x01, 0x01, 0xf0, 0x00, 0x2f, 0x04,
119 0x49, 0x53, 0x4b, 0x54, 0x71, 0xe8, 0x00, 0x80,
120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
123 case 2:
124 // Circuit Pack (6) - #2
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200125 // log.Println("Circuit Pack")
Shad Ansari1106b022019-01-16 22:22:35 -0800126 pkt = []byte{
127 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
128 0x00, 0x06, 0x01, 0x01, 0x0f, 0x00, 0x42, 0x52,
129 0x43, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
132 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
133 case 3:
134 // Circuit Pack (6) - #3
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200135 // log.Println("Circuit Pack")
Shad Ansari1106b022019-01-16 22:22:35 -0800136 pkt = []byte{
137 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
138 0x00, 0x06, 0x01, 0x01, 0x00, 0xf8, 0x20, 0x20,
139 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
140 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
141 0x20, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
143 case 4:
144 // Circuit Pack (6) - #4
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200145 // log.Println("Circuit Pack")
Shad Ansari1106b022019-01-16 22:22:35 -0800146 pkt = []byte{
147 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
148 0x00, 0x06, 0x01, 0x01, 0x00, 0x04, 0x00, 0x00,
149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
153 case 5:
154 // Circuit Pack (6) - #5
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200155 // log.Println("Circuit Pack")
Shad Ansari1106b022019-01-16 22:22:35 -0800156 pkt = []byte{
157 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
158 0x00, 0x06, 0x01, 0x80, 0xf0, 0x00, 0xee, 0x01,
159 0x49, 0x53, 0x4b, 0x54, 0x71, 0xe8, 0x00, 0x80,
160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
161 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
163 case 6:
164 // Circuit Pack (6) - #6
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200165 // log.Println("Circuit Pack")
Shad Ansari1106b022019-01-16 22:22:35 -0800166 pkt = []byte{
167 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
168 0x00, 0x06, 0x01, 0x80, 0x0f, 0x00, 0x42, 0x52,
169 0x43, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
173 case 7:
174 // Circuit Pack (6) - #7
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200175 // log.Println("Circuit Pack")
Shad Ansari1106b022019-01-16 22:22:35 -0800176 pkt = []byte{
177 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
178 0x00, 0x06, 0x01, 0x80, 0x00, 0xf8, 0x20, 0x20,
179 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
180 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
181 0x20, 0x20, 0x00, 0x08, 0x40, 0x10, 0x00, 0x00,
182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
183 case 8:
184 // Circuit Pack (6) - #8
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200185 // log.Println("Circuit Pack")
Shad Ansari1106b022019-01-16 22:22:35 -0800186 pkt = []byte{
187 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
188 0x00, 0x06, 0x01, 0x80, 0x00, 0x04, 0x00, 0x00,
189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
193 case 9, 10, 11, 12:
194 // PPTP (11)
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200195 // log.Println("PPTP")
Shad Ansari1106b022019-01-16 22:22:35 -0800196 pkt = []byte{
197 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
198 0x00, 0x0b, 0x01, 0x01, 0xff, 0xfe, 0x00, 0x2f,
199 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0xee, 0x00,
200 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
203 pkt[11] = state.pptpInstance // ME Instance
204 state.pptpInstance++
205 case 13, 14, 15, 16, 17, 18, 19, 20:
206 // T-CONT (262)
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200207 // log.Println("T-CONT")
Shad Ansari1106b022019-01-16 22:22:35 -0800208 pkt = []byte{
209 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
210 0x01, 0x06, 0x80, 0x00, 0xe0, 0x00, 0xff, 0xff,
211 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200215
Shad Ansari1106b022019-01-16 22:22:35 -0800216 state.tcontInstance++
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200217 pkt[11] = state.tcontInstance // TCONT ME Instance
218
Shad Ansari1106b022019-01-16 22:22:35 -0800219 case 21:
220 // ANI-G (263)
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200221 // log.Println("ANI-G")
Shad Ansari1106b022019-01-16 22:22:35 -0800222 pkt = []byte{
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
224 0x01, 0x07, 0x80, 0x01, 0xff, 0xff, 0x01, 0x00,
225 0x08, 0x00, 0x30, 0x00, 0x00, 0x05, 0x09, 0x00,
226 0x00, 0xe0, 0x54, 0xff, 0xff, 0x00, 0x00, 0x0c,
227 0x63, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00,
228 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
229 case 22, 23, 24, 25:
230 // UNI-G (264)
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200231 // log.Println("UNI-G")
Shad Ansari1106b022019-01-16 22:22:35 -0800232 pkt = []byte{
233 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
234 0x01, 0x08, 0x01, 0x01, 0xf8, 0x00, 0x00, 0x00,
235 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
236 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
237 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
239 pkt[11] = state.uniGInstance // UNI-G ME Instance
240 state.uniGInstance++
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200241
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200242 case 26, 30, 34, 38, 42, 46, 50, 54,
243 58, 62, 66, 70, 74, 78, 82, 86,
244 90, 94, 98, 102, 106, 110, 114, 118,
245 122, 126, 130, 134, 138, 142, 146, 150,
246 154, 158, 162, 166, 170, 174, 178, 182,
247 186, 190, 194, 198, 202, 206, 210, 214,
248 218, 222, 226, 230, 234, 238, 242, 246,
249 250, 254, 258, 262, 266, 270, 274, 278:
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200250 // Prior-Q with mask downstream
Matteo Scandoloa0026812019-08-20 11:01:32 -0700251 log.Tracef("Mib-upload for prior-q with mask")
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200252 // For downstream PQ, pkt[10] is 0x00
253 // So the instanceId will be like 0x0001, 0x0002,... etc
254 pkt = []byte{
255 0x00, 0x42, 0x2e, 0x0a, 0x00, 0x02, 0x00, 0x00,
256 0x01, 0x15, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff,
257 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
258 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
259 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
260 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261 }
262 state.priorQInstance++
263 pkt[11] = state.priorQInstance
264
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200265 case 27, 31, 35, 39, 43, 47, 51, 55,
266 59, 63, 67, 71, 75, 79, 83, 87,
267 91, 95, 99, 103, 107, 111, 115, 119,
268 123, 127, 131, 135, 139, 143, 147, 151,
269 155, 159, 163, 167, 171, 175, 179, 183,
270 187, 191, 195, 199, 203, 207, 211, 215,
271 219, 223, 227, 231, 235, 239, 243, 247,
272 251, 255, 259, 263, 267, 271, 275, 279:
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200273 // Prior-Q with attribute list downstream
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200274 // log.Println("Mib-upload for prior-q with attribute list")
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200275 pkt = []byte{
276 0x00, 0x43, 0x2e, 0x0a, 0x00, 0x02, 0x00, 0x00,
277 0x01, 0x15, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x01,
278 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
279 0x20, 0x00, 0x00, 0x01, 0x20, 0x01, 0x00, 0x01,
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
282 }
283
284 pkt[11] = state.priorQInstance
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200285
286 // Group 8 PriorQ to point to a particular TCONT
287 // Priority for each group of PriorQ is 0 - 7
288 if state.priorQPriority % NumPriorQPerTcont == 0 {
289 state.tcontPointer++
290 }
291
292 // Only for verification. To be removed
293 if state.tcontPointer > state.tcontInstance {
Matteo Scandoloa0026812019-08-20 11:01:32 -0700294 log.Tracef("Error: Invalid TcontPointer")
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200295 break
296 }
297
298 pkt[24] = state.tcontPointer
299 pkt[26] = state.priorQPriority % NumPriorQPerTcont
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200300 pkt[28] = state.tcontInstance
301
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200302 case 28, 32, 36, 40, 44, 48, 52, 56,
303 60, 64, 68, 72, 76, 80, 84, 88,
304 92, 96, 100, 104, 108, 112, 116, 120,
305 124, 128, 132, 136, 140, 144, 148, 152,
306 156, 160, 164, 168, 172, 176, 180, 184,
307 188, 192, 196, 200, 204, 208, 212, 216,
308 220, 224, 228, 232, 236, 240, 244, 248,
309 252, 256, 260, 264, 268, 272, 276, 280:
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200310 // Prior-Q with mask upstream
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200311 // log.Println("Mib-upload for prior-q with mask")
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200312 pkt = []byte{
313 0x00, 0x42, 0x2e, 0x0a, 0x00, 0x02, 0x00, 0x00,
314 0x01, 0x15, 0x80, 0x00, 0x00, 0x0f, 0xff, 0xff,
315 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
316 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
317 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
318 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319 }
320 pkt[11] = state.priorQInstance
321
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200322 case 29, 33, 37, 41, 45, 49, 53, 57,
323 61, 65, 69, 73, 77, 81, 85, 89,
324 93, 97, 101, 105, 109, 113, 117, 121,
325 125, 129, 133, 137, 141, 145, 149, 153,
326 157, 161, 165, 169, 173, 177, 181, 185,
327 189, 193, 197, 201, 205, 209, 213, 217,
328 221, 225, 229, 233, 237, 241, 245, 249,
329 253, 257, 261, 265, 269, 273, 277, 281:
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200330 // Prior-Q with attribute list upstream
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200331 // log.Println("Mib-upload for prior-q with attribute list")
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200332 // For upstream pkt[10] is fixed as 80
333 // So for upstream PQ, instanceId will be like 0x8001, 0x8002 ... etc
334 pkt = []byte{
335 0x00, 0x43, 0x2e, 0x0a, 0x00, 0x02, 0x00, 0x00,
336 0x01, 0x15, 0x80, 0x00, 0xff, 0xf0, 0x00, 0x01,
337 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
338 0x20, 0x00, 0x00, 0x80, 0x20, 0x01, 0x00, 0x01,
339 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
340 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
341 }
342
343 pkt[11] = state.priorQInstance
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200344 pkt[24] = state.tcontPointer
345 pkt[26] = state.priorQPriority % NumPriorQPerTcont // Priority of this PriorQ
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200346 pkt[28] = state.tcontInstance
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200347 state.priorQPriority++
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200348
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200349
350 case 282, 283, 284, 285, 286, 287, 288, 289:
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200351 // Traffic Scheduler
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200352 // log.Println("Traffic Scheduler")
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200353 pkt = []byte{
354 0x02, 0xa4, 0x2e, 0x0a, 0x00, 0x02, 0x00, 0x00,
355 0x01, 0x16, 0x80, 0x00, 0xf0, 0x00, 0x80, 0x00,
356 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
357 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
358 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
359 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
360 }
361
362 pkt[15] = state.tcontInstance
363 state.tcontInstance++
364
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200365 case 290:
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200366 // ONT-2G
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200367 // log.Println("ONT-2G")
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200368 pkt = []byte{
369 0x00, 0x16, 0x2e, 0x0a, 0x00, 0x02, 0x00, 0x00,
370 0x01, 0x01, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x40,
371 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
372 0x00, 0x7f, 0x00, 0x00, 0x3f, 0x00, 0x01, 0x00,
373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
374 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
375 }
376
Shad Ansari1106b022019-01-16 22:22:35 -0800377 default:
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800378 state.extraMibUploadCtr++
Matteo Scandoloa0026812019-08-20 11:01:32 -0700379 errstr := fmt.Sprintf("%v - Invalid MibUpload request: %d, extras: %d", key, state.mibUploadCtr, state)
Keita NISHIMOTO21853b32019-01-25 19:29:59 +0900380 return nil, errors.New(errstr)
Shad Ansari1106b022019-01-16 22:22:35 -0800381 }
382
383 state.mibUploadCtr++
384 return pkt, nil
385}
386
387func set(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
388 var pkt []byte
389
390 pkt = []byte{
391 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
392 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
393 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
394 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
395 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
396 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
397
Matteo Scandoloa0026812019-08-20 11:01:32 -0700398 log.WithFields(log.Fields{
399 "IntfId": key.IntfId,
400 "OnuId": key.OnuId,
401 }).Tracef("Omci Set")
Shad Ansari1106b022019-01-16 22:22:35 -0800402
403 return pkt, nil
404}
405
406func create(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
407 var pkt []byte
408
409 if class == GEMPortNetworkCTP {
410 if onuOmciState, ok := OnuOmciStateMap[key]; !ok {
Matteo Scandoloa0026812019-08-20 11:01:32 -0700411 log.WithFields(log.Fields{
412 "IntfId": key.IntfId,
413 "OnuId": key.OnuId,
414 }).Tracef("ONU Key Error")
Shad Ansari1106b022019-01-16 22:22:35 -0800415 return nil, errors.New("ONU Key Error")
416 } else {
417 onuOmciState.gemPortId = binary.BigEndian.Uint16(content[:2])
Matteo Scandoloa0026812019-08-20 11:01:32 -0700418 log.WithFields(log.Fields{
419 "IntfId": key.IntfId,
420 "OnuId": key.OnuId,
421 }).Tracef("Gem Port Id %d", key, onuOmciState)
Shad Ansari1106b022019-01-16 22:22:35 -0800422 // FIXME
423 OnuOmciStateMap[key].state = DONE
Matteo Scandolo203314b2019-08-26 14:28:42 -0700424 omciCh <- OmciChMessage{
425 Type: GemPortAdded,
426 Data: OmciChMessageData{
427 OnuId: key.OnuId,
428 IntfId: key.IntfId,
429 },
430 }
Shad Ansari1106b022019-01-16 22:22:35 -0800431 }
432 }
433
434 pkt = []byte{
435 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x01,
436 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
437 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
438 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
439 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
440 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
441
Matteo Scandoloa0026812019-08-20 11:01:32 -0700442 log.WithFields(log.Fields{
443 "IntfId": key.IntfId,
444 "OnuId": key.OnuId,
445 }).Tracef("Omci Create")
Shad Ansari1106b022019-01-16 22:22:35 -0800446
447 return pkt, nil
448}
449
450func get(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
451 var pkt []byte
452
453 pkt = []byte{
454 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x02, 0x01,
455 0x00, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
456 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
457 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
458 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
459 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
460
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200461 pkt = GetAttributes(class, content, key, pkt)
Shad Ansari1106b022019-01-16 22:22:35 -0800462
Matteo Scandoloa0026812019-08-20 11:01:32 -0700463 log.WithFields(log.Fields{
464 "IntfId": key.IntfId,
465 "OnuId": key.OnuId,
466 }).Tracef("Omci Get")
Shad Ansari1106b022019-01-16 22:22:35 -0800467 return pkt, nil
468}
469
470func getAllAlarms(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
471 var pkt []byte
472
473 pkt = []byte{
474 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
475 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
477 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
478 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
479 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
480
Matteo Scandoloa0026812019-08-20 11:01:32 -0700481 log.WithFields(log.Fields{
482 "IntfId": key.IntfId,
483 "OnuId": key.OnuId,
484 }).Tracef("Omci GetAllAlarms")
Shad Ansari1106b022019-01-16 22:22:35 -0800485
486 return pkt, nil
487}
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800488
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800489func syncTime(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
490 var pkt []byte
491
492 pkt = []byte{
493 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
494 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
495 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
496 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
497 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
499
Matteo Scandoloa0026812019-08-20 11:01:32 -0700500 log.WithFields(log.Fields{
501 "IntfId": key.IntfId,
502 "OnuId": key.OnuId,
503 }).Tracef("Omci syncTime")
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800504
505 return pkt, nil
506}
507
508func getAllAlarmsNext(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
509 var pkt []byte
510
511 pkt = []byte{
512 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200513 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800514 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
515 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
516 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
517 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
518
Matteo Scandoloa0026812019-08-20 11:01:32 -0700519 log.WithFields(log.Fields{
520 "IntfId": key.IntfId,
521 "OnuId": key.OnuId,
522 }).Tracef("Omci GetAllAlarmsNext")
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200523
524 return pkt, nil
525}
526
527func delete(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
528 var pkt []byte
529
530 pkt = []byte{
531 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
532 0x00, 0x0b, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
533 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
534 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
535 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
537
Matteo Scandoloa0026812019-08-20 11:01:32 -0700538 log.WithFields(log.Fields{
539 "IntfId": key.IntfId,
540 "OnuId": key.OnuId,
541 }).Tracef("Omci Delete")
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800542
543 return pkt, nil
544}
Zdravko Bozakov8e9d85a2019-05-27 21:02:59 +0200545
546func reboot(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
547 var pkt []byte
548 pkt = []byte{
549 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
550 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
551 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
552 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
553 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
554 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
555
Matteo Scandoloa0026812019-08-20 11:01:32 -0700556 log.WithFields(log.Fields{
557 "IntfId": key.IntfId,
558 "OnuId": key.OnuId,
559 }).Tracef("Omci Reboot")
Zdravko Bozakov8e9d85a2019-05-27 21:02:59 +0200560 return pkt, nil
561}
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200562