MCPcopy Create free account
hub / github.com/Edgio/vflow / decodeFlowSample

Function decodeFlowSample

sflow/flow_sample.go:200–249  ·  view source on GitHub ↗
(r io.ReadSeeker)

Source from the content-addressed store, hash-verified

198}
199
200func decodeFlowSample(r io.ReadSeeker) (*FlowSample, error) {
201 var (
202 fs = new(FlowSample)
203 rTypeFormat uint32
204 rTypeLength uint32
205 err error
206 )
207
208 if err = fs.unmarshal(r); err != nil {
209 return nil, err
210 }
211
212 fs.Records = make(map[string]Record)
213
214 for i := uint32(0); i < fs.RecordsNo; i++ {
215 if err = read(r, &rTypeFormat); err != nil {
216 return nil, err
217 }
218 if err = read(r, &rTypeLength); err != nil {
219 return nil, err
220 }
221
222 switch rTypeFormat {
223 case SFDataRawHeader:
224 d, err := decodeSampledHeader(r)
225 if err != nil {
226 return fs, err
227 }
228 fs.Records["RawHeader"] = d
229 case SFDataExtSwitch:
230 d, err := decodeExtSwitchData(r)
231 if err != nil {
232 return fs, err
233 }
234
235 fs.Records["ExtSwitch"] = d
236 case SFDataExtRouter:
237 d, err := decodeExtRouterData(r, rTypeLength)
238 if err != nil {
239 return fs, err
240 }
241
242 fs.Records["ExtRouter"] = d
243 default:
244 r.Seek(int64(rTypeLength), 1)
245 }
246 }
247
248 return fs, nil
249}
250
251func decodeSampledHeader(r io.Reader) (*packet.Packet, error) {
252 var (

Callers 1

SFDecodeMethod · 0.85

Calls 5

readFunction · 0.85
decodeSampledHeaderFunction · 0.85
decodeExtSwitchDataFunction · 0.85
decodeExtRouterDataFunction · 0.85
unmarshalMethod · 0.45

Tested by

no test coverage detected