blob: ec7f71296d7f139962f97831b7813a650165db44 [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
424 }
425 }
426
427 pkt = []byte{
428 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x01,
429 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
430 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
431 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
432 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
433 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
434
Matteo Scandoloa0026812019-08-20 11:01:32 -0700435 log.WithFields(log.Fields{
436 "IntfId": key.IntfId,
437 "OnuId": key.OnuId,
438 }).Tracef("Omci Create")
Shad Ansari1106b022019-01-16 22:22:35 -0800439
440 return pkt, nil
441}
442
443func get(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
444 var pkt []byte
445
446 pkt = []byte{
447 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x02, 0x01,
448 0x00, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
449 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
450 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
451 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
452 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
453
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200454 pkt = GetAttributes(class, content, key, pkt)
Shad Ansari1106b022019-01-16 22:22:35 -0800455
Matteo Scandoloa0026812019-08-20 11:01:32 -0700456 log.WithFields(log.Fields{
457 "IntfId": key.IntfId,
458 "OnuId": key.OnuId,
459 }).Tracef("Omci Get")
Shad Ansari1106b022019-01-16 22:22:35 -0800460 return pkt, nil
461}
462
463func getAllAlarms(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
464 var pkt []byte
465
466 pkt = []byte{
467 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
468 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
469 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
470 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
471 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
472 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
473
Matteo Scandoloa0026812019-08-20 11:01:32 -0700474 log.WithFields(log.Fields{
475 "IntfId": key.IntfId,
476 "OnuId": key.OnuId,
477 }).Tracef("Omci GetAllAlarms")
Shad Ansari1106b022019-01-16 22:22:35 -0800478
479 return pkt, nil
480}
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800481
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800482func syncTime(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
483 var pkt []byte
484
485 pkt = []byte{
486 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
487 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
488 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
489 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
490 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
491 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
492
Matteo Scandoloa0026812019-08-20 11:01:32 -0700493 log.WithFields(log.Fields{
494 "IntfId": key.IntfId,
495 "OnuId": key.OnuId,
496 }).Tracef("Omci syncTime")
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800497
498 return pkt, nil
499}
500
501func getAllAlarmsNext(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
502 var pkt []byte
503
504 pkt = []byte{
505 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200506 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800507 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
508 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
509 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
510 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
511
Matteo Scandoloa0026812019-08-20 11:01:32 -0700512 log.WithFields(log.Fields{
513 "IntfId": key.IntfId,
514 "OnuId": key.OnuId,
515 }).Tracef("Omci GetAllAlarmsNext")
Zdravko Bozakovf56cca42019-04-29 10:06:47 +0200516
517 return pkt, nil
518}
519
520func delete(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
521 var pkt []byte
522
523 pkt = []byte{
524 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
525 0x00, 0x0b, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
526 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
527 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
528 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
529 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
530
Matteo Scandoloa0026812019-08-20 11:01:32 -0700531 log.WithFields(log.Fields{
532 "IntfId": key.IntfId,
533 "OnuId": key.OnuId,
534 }).Tracef("Omci Delete")
Mahir Gunyel5b89e5e2019-02-15 09:34:14 -0800535
536 return pkt, nil
537}
Zdravko Bozakov8e9d85a2019-05-27 21:02:59 +0200538
539func reboot(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
540 var pkt []byte
541 pkt = []byte{
542 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
543 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
544 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
545 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
546 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
547 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
548
Matteo Scandoloa0026812019-08-20 11:01:32 -0700549 log.WithFields(log.Fields{
550 "IntfId": key.IntfId,
551 "OnuId": key.OnuId,
552 }).Tracef("Omci Reboot")
Zdravko Bozakov8e9d85a2019-05-27 21:02:59 +0200553 return pkt, nil
554}
Zdravko Bozakov3d762142019-07-15 16:57:17 +0200555