blob: f4c955e826c864a41d062052cddf173a629af229 [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,
36}
37
38func mibReset(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
39 var pkt []byte
40
Mahir Gunyeled7b07b2019-02-11 12:06:02 -080041 log.Printf("%v - Omci MibReset",key)
42 if state, ok := OnuOmciStateMap[key]; ok{
43 log.Printf("%v - Reseting OnuOmciState",key)
44 state.ResetOnuOmciState()
45 }
Shad Ansari1106b022019-01-16 22:22:35 -080046
47 pkt = []byte{
48 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
49 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 return pkt, nil
55}
56
57func mibUpload(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
58 var pkt []byte
59
Mahir Gunyeled7b07b2019-02-11 12:06:02 -080060 log.Printf("%v - Omci MibUpload",key)
Shad Ansari1106b022019-01-16 22:22:35 -080061
62 pkt = []byte{
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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
70 pkt[9] = NumMibUploads // Number of subsequent MibUploadNext cmds
71
72 return pkt, nil
73}
74
75func mibUploadNext(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
76 var pkt []byte
77
78 state := OnuOmciStateMap[key]
79
Mahir Gunyeled7b07b2019-02-11 12:06:02 -080080 log.Printf("%v - Omci MibUploadNext %d", key, state.mibUploadCtr)
Shad Ansari1106b022019-01-16 22:22:35 -080081
82 switch state.mibUploadCtr {
83 case 0:
84 // ONT Data (2)
85 pkt = []byte{
86 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
87 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
88 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
89 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
92 case 1:
93 // Circuit Pack (6) - #1
94 pkt = []byte{
95 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
96 0x00, 0x06, 0x01, 0x01, 0xf0, 0x00, 0x2f, 0x04,
97 0x49, 0x53, 0x4b, 0x54, 0x71, 0xe8, 0x00, 0x80,
98 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
99 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
101 case 2:
102 // Circuit Pack (6) - #2
103 pkt = []byte{
104 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
105 0x00, 0x06, 0x01, 0x01, 0x0f, 0x00, 0x42, 0x52,
106 0x43, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
110 case 3:
111 // Circuit Pack (6) - #3
112 pkt = []byte{
113 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
114 0x00, 0x06, 0x01, 0x01, 0x00, 0xf8, 0x20, 0x20,
115 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
116 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
117 0x20, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
119 case 4:
120 // Circuit Pack (6) - #4
121 pkt = []byte{
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
123 0x00, 0x06, 0x01, 0x01, 0x00, 0x04, 0x00, 0x00,
124 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
128 case 5:
129 // Circuit Pack (6) - #5
130 pkt = []byte{
131 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
132 0x00, 0x06, 0x01, 0x80, 0xf0, 0x00, 0xee, 0x01,
133 0x49, 0x53, 0x4b, 0x54, 0x71, 0xe8, 0x00, 0x80,
134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
137 case 6:
138 // Circuit Pack (6) - #6
139 pkt = []byte{
140 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
141 0x00, 0x06, 0x01, 0x80, 0x0f, 0x00, 0x42, 0x52,
142 0x43, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
146 case 7:
147 // Circuit Pack (6) - #7
148 pkt = []byte{
149 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
150 0x00, 0x06, 0x01, 0x80, 0x00, 0xf8, 0x20, 0x20,
151 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
152 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
153 0x20, 0x20, 0x00, 0x08, 0x40, 0x10, 0x00, 0x00,
154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
155 case 8:
156 // Circuit Pack (6) - #8
157 pkt = []byte{
158 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
159 0x00, 0x06, 0x01, 0x80, 0x00, 0x04, 0x00, 0x00,
160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
164 case 9, 10, 11, 12:
165 // PPTP (11)
166 pkt = []byte{
167 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
168 0x00, 0x0b, 0x01, 0x01, 0xff, 0xfe, 0x00, 0x2f,
169 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0xee, 0x00,
170 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
173 pkt[11] = state.pptpInstance // ME Instance
174 state.pptpInstance++
175 case 13, 14, 15, 16, 17, 18, 19, 20:
176 // T-CONT (262)
177 pkt = []byte{
178 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
179 0x01, 0x06, 0x80, 0x00, 0xe0, 0x00, 0xff, 0xff,
180 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
184 pkt[11] = state.tcontInstance // TCONT ME Instance
185 state.tcontInstance++
186 case 21:
187 // ANI-G (263)
188 pkt = []byte{
189 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
190 0x01, 0x07, 0x80, 0x01, 0xff, 0xff, 0x01, 0x00,
191 0x08, 0x00, 0x30, 0x00, 0x00, 0x05, 0x09, 0x00,
192 0x00, 0xe0, 0x54, 0xff, 0xff, 0x00, 0x00, 0x0c,
193 0x63, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00,
194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
195 case 22, 23, 24, 25:
196 // UNI-G (264)
197 pkt = []byte{
198 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
199 0x01, 0x08, 0x01, 0x01, 0xf8, 0x00, 0x00, 0x00,
200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
204 pkt[11] = state.uniGInstance // UNI-G ME Instance
205 state.uniGInstance++
206 default:
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800207 state.extraMibUploadCtr++
208 errstr := fmt.Sprintf("%v - Invalid MibUpload request: %d, extras: %d", key, state.mibUploadCtr, state.extraMibUploadCtr)
Keita NISHIMOTO21853b32019-01-25 19:29:59 +0900209 return nil, errors.New(errstr)
Shad Ansari1106b022019-01-16 22:22:35 -0800210 }
211
212 state.mibUploadCtr++
213 return pkt, nil
214}
215
216func set(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
217 var pkt []byte
218
219 pkt = []byte{
220 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
221 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00, 0x00, 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
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800227 log.Printf("%v - Omci Set",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800228
229 return pkt, nil
230}
231
232func create(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
233 var pkt []byte
234
235 if class == GEMPortNetworkCTP {
236 if onuOmciState, ok := OnuOmciStateMap[key]; !ok {
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800237 log.Printf("%v - ONU Key Error",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800238 return nil, errors.New("ONU Key Error")
239 } else {
240 onuOmciState.gemPortId = binary.BigEndian.Uint16(content[:2])
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800241 log.Printf("%v - Gem Port Id %d", key, onuOmciState.gemPortId)
Shad Ansari1106b022019-01-16 22:22:35 -0800242 // FIXME
243 OnuOmciStateMap[key].state = DONE
244 }
245 }
246
247 pkt = []byte{
248 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x01,
249 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800255 log.Printf("%v - Omci Create",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800256
257 return pkt, nil
258}
259
260func get(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
261 var pkt []byte
262
263 pkt = []byte{
264 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x02, 0x01,
265 0x00, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
267 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
269 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
270
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800271 log.Printf("%v - Omci Get",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800272
273 return pkt, nil
274}
275
276func getAllAlarms(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
277 var pkt []byte
278
279 pkt = []byte{
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
281 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
282 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
283 0x00, 0x00, 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
Mahir Gunyeled7b07b2019-02-11 12:06:02 -0800287 log.Printf("%v - Omci GetAllAlarms",key)
Shad Ansari1106b022019-01-16 22:22:35 -0800288
289 return pkt, nil
290}