- buf = make([]byte, m.Size())
- } else {
- buf = b
- }
- // field[1] m.SwIfIndex
- o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
- pos += 4
- // field[1] m.HwAddr
- for i := 0; i < 6; i++ {
- var x uint8
- if i < len(m.HwAddr) {
- x = uint8(m.HwAddr[i])
- }
- buf[pos] = uint8(x)
- pos += 1
- }
- // field[1] m.ID
- o.PutUint32(buf[pos:pos+4], uint32(m.ID))
- pos += 4
- // field[1] m.Role
- o.PutUint32(buf[pos:pos+4], uint32(m.Role))
- pos += 4
- // field[1] m.Mode
- o.PutUint32(buf[pos:pos+4], uint32(m.Mode))
- pos += 4
- // field[1] m.ZeroCopy
- if m.ZeroCopy {
- buf[pos] = 1
- }
- pos += 1
- // field[1] m.SocketID
- o.PutUint32(buf[pos:pos+4], uint32(m.SocketID))
- pos += 4
- // field[1] m.RingSize
- o.PutUint32(buf[pos:pos+4], uint32(m.RingSize))
- pos += 4
- // field[1] m.BufferSize
- o.PutUint16(buf[pos:pos+2], uint16(m.BufferSize))
- pos += 2
- // field[1] m.Flags
- o.PutUint32(buf[pos:pos+4], uint32(m.Flags))
- pos += 4
- // field[1] m.IfName
- copy(buf[pos:pos+64], m.IfName)
- pos += 64
- return buf, nil
-}
-func (m *MemifDetails) Unmarshal(tmp []byte) error {
- o := binary.BigEndian
- _ = o
- pos := 0
- _ = pos
- // field[1] m.SwIfIndex
- m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
- pos += 4
- // field[1] m.HwAddr
- for i := 0; i < len(m.HwAddr); i++ {
- m.HwAddr[i] = uint8(tmp[pos])
- pos += 1
- }
- // field[1] m.ID
- m.ID = uint32(o.Uint32(tmp[pos : pos+4]))
- pos += 4
- // field[1] m.Role
- m.Role = MemifRole(o.Uint32(tmp[pos : pos+4]))
- pos += 4
- // field[1] m.Mode
- m.Mode = MemifMode(o.Uint32(tmp[pos : pos+4]))
- pos += 4
- // field[1] m.ZeroCopy
- m.ZeroCopy = tmp[pos] != 0
- pos += 1
- // field[1] m.SocketID
- m.SocketID = uint32(o.Uint32(tmp[pos : pos+4]))
- pos += 4
- // field[1] m.RingSize
- m.RingSize = uint32(o.Uint32(tmp[pos : pos+4]))
- pos += 4
- // field[1] m.BufferSize
- m.BufferSize = uint16(o.Uint16(tmp[pos : pos+2]))
- pos += 2
- // field[1] m.Flags
- m.Flags = IfStatusFlags(o.Uint32(tmp[pos : pos+4]))
- pos += 4
- // field[1] m.IfName
- {
- nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
- m.IfName = codec.DecodeString(tmp[pos : pos+nul])
- pos += 64
- }
+ b = make([]byte, m.Size())
+ }
+ buf := codec.NewBuffer(b)
+ buf.EncodeUint32(uint32(m.SwIfIndex))
+ buf.EncodeBytes(m.HwAddr[:], 6)
+ buf.EncodeUint32(m.ID)
+ buf.EncodeUint32(uint32(m.Role))
+ buf.EncodeUint32(uint32(m.Mode))
+ buf.EncodeBool(m.ZeroCopy)
+ buf.EncodeUint32(m.SocketID)
+ buf.EncodeUint32(m.RingSize)
+ buf.EncodeUint16(m.BufferSize)
+ buf.EncodeUint32(uint32(m.Flags))
+ buf.EncodeString(m.IfName, 64)
+ return buf.Bytes(), nil
+}
+func (m *MemifDetails) Unmarshal(b []byte) error {
+ buf := codec.NewBuffer(b)
+ m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+ copy(m.HwAddr[:], buf.DecodeBytes(6))
+ m.ID = buf.DecodeUint32()
+ m.Role = MemifRole(buf.DecodeUint32())
+ m.Mode = MemifMode(buf.DecodeUint32())
+ m.ZeroCopy = buf.DecodeBool()
+ m.SocketID = buf.DecodeUint32()
+ m.RingSize = buf.DecodeUint32()
+ m.BufferSize = buf.DecodeUint16()
+ m.Flags = IfStatusFlags(buf.DecodeUint32())
+ m.IfName = buf.DecodeString(64)