xdp_linux.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package netlink
  2. import (
  3. "bytes"
  4. "fmt"
  5. )
  6. const (
  7. xdrDiagUmemLen = 8 + 8*4
  8. xdrDiagStatsLen = 6 * 8
  9. )
  10. func (x *XDPDiagUmem) deserialize(b []byte) error {
  11. if len(b) < xdrDiagUmemLen {
  12. return fmt.Errorf("XDP umem diagnosis data short read (%d); want %d", len(b), xdrDiagUmemLen)
  13. }
  14. rb := bytes.NewBuffer(b)
  15. x.Size = native.Uint64(rb.Next(8))
  16. x.ID = native.Uint32(rb.Next(4))
  17. x.NumPages = native.Uint32(rb.Next(4))
  18. x.ChunkSize = native.Uint32(rb.Next(4))
  19. x.Headroom = native.Uint32(rb.Next(4))
  20. x.Ifindex = native.Uint32(rb.Next(4))
  21. x.QueueID = native.Uint32(rb.Next(4))
  22. x.Flags = native.Uint32(rb.Next(4))
  23. x.Refs = native.Uint32(rb.Next(4))
  24. return nil
  25. }
  26. func (x *XDPDiagStats) deserialize(b []byte) error {
  27. if len(b) < xdrDiagStatsLen {
  28. return fmt.Errorf("XDP diagnosis statistics short read (%d); want %d", len(b), xdrDiagStatsLen)
  29. }
  30. rb := bytes.NewBuffer(b)
  31. x.RxDropped = native.Uint64(rb.Next(8))
  32. x.RxInvalid = native.Uint64(rb.Next(8))
  33. x.RxFull = native.Uint64(rb.Next(8))
  34. x.FillRingEmpty = native.Uint64(rb.Next(8))
  35. x.TxInvalid = native.Uint64(rb.Next(8))
  36. x.TxRingEmpty = native.Uint64(rb.Next(8))
  37. return nil
  38. }