+
+// MemifCreate represents VPP binary API message 'memif_create'.
+type MemifCreate struct {
+ Role MemifRole `binapi:"memif_role,name=role" json:"role,omitempty"`
+ Mode MemifMode `binapi:"memif_mode,name=mode" json:"mode,omitempty"`
+ RxQueues uint8 `binapi:"u8,name=rx_queues" json:"rx_queues,omitempty"`
+ TxQueues uint8 `binapi:"u8,name=tx_queues" json:"tx_queues,omitempty"`
+ ID uint32 `binapi:"u32,name=id" json:"id,omitempty"`
+ SocketID uint32 `binapi:"u32,name=socket_id" json:"socket_id,omitempty"`
+ RingSize uint32 `binapi:"u32,name=ring_size" json:"ring_size,omitempty"`
+ BufferSize uint16 `binapi:"u16,name=buffer_size" json:"buffer_size,omitempty"`
+ NoZeroCopy bool `binapi:"bool,name=no_zero_copy" json:"no_zero_copy,omitempty"`
+ HwAddr MacAddress `binapi:"mac_address,name=hw_addr" json:"hw_addr,omitempty"`
+ Secret string `binapi:"string[24],name=secret" json:"secret,omitempty" struc:"[24]byte"`
+}
+
+func (m *MemifCreate) Reset() { *m = MemifCreate{} }
+func (*MemifCreate) GetMessageName() string { return "memif_create" }
+func (*MemifCreate) GetCrcString() string { return "b1b25061" }
+func (*MemifCreate) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *MemifCreate) Size() int {
+ if m == nil {
+ return 0
+ }
+ var size int
+ // field[1] m.Role
+ size += 4
+ // field[1] m.Mode
+ size += 4
+ // field[1] m.RxQueues
+ size += 1
+ // field[1] m.TxQueues
+ size += 1
+ // field[1] m.ID
+ size += 4
+ // field[1] m.SocketID
+ size += 4
+ // field[1] m.RingSize
+ size += 4
+ // field[1] m.BufferSize
+ size += 2
+ // field[1] m.NoZeroCopy
+ size += 1
+ // field[1] m.HwAddr
+ size += 6
+ // field[1] m.Secret
+ size += 24
+ return size
+}
+func (m *MemifCreate) Marshal(b []byte) ([]byte, error) {
+ o := binary.BigEndian
+ _ = o
+ pos := 0
+ _ = pos
+ var buf []byte
+ if b == nil {
+ buf = make([]byte, m.Size())
+ } else {
+ buf = b
+ }
+ // 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.RxQueues
+ buf[pos] = uint8(m.RxQueues)
+ pos += 1
+ // field[1] m.TxQueues
+ buf[pos] = uint8(m.TxQueues)
+ pos += 1
+ // field[1] m.ID
+ o.PutUint32(buf[pos:pos+4], uint32(m.ID))
+ pos += 4
+ // 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.NoZeroCopy
+ if m.NoZeroCopy {
+ buf[pos] = 1
+ }
+ pos += 1
+ // 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.Secret
+ copy(buf[pos:pos+24], m.Secret)
+ pos += 24
+ return buf, nil
+}
+func (m *MemifCreate) Unmarshal(tmp []byte) error {
+ o := binary.BigEndian
+ _ = o
+ pos := 0
+ _ = pos
+ // 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.RxQueues
+ m.RxQueues = uint8(tmp[pos])
+ pos += 1
+ // field[1] m.TxQueues
+ m.TxQueues = uint8(tmp[pos])
+ pos += 1
+ // field[1] m.ID
+ m.ID = uint32(o.Uint32(tmp[pos : pos+4]))
+ pos += 4
+ // 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.NoZeroCopy
+ m.NoZeroCopy = tmp[pos] != 0
+ pos += 1
+ // field[1] m.HwAddr
+ for i := 0; i < len(m.HwAddr); i++ {
+ m.HwAddr[i] = uint8(tmp[pos])
+ pos += 1
+ }
+ // field[1] m.Secret
+ {
+ nul := bytes.Index(tmp[pos:pos+24], []byte{0x00})
+ m.Secret = codec.DecodeString(tmp[pos : pos+nul])
+ pos += 24
+ }
+ return nil