From 8b66677c2382a8e739d437621de4473d5ec0b9f1 Mon Sep 17 00:00:00 2001 From: Rastislav Szabo Date: Mon, 25 Sep 2017 21:58:24 +0200 Subject: generator fix - add new message type Change-Id: I5e2b312e086d18eb7fa3f349750caea20005f530 Signed-off-by: Rastislav Szabo --- api/api.go | 2 ++ cmd/binapi-generator/generator.go | 5 +++++ core/bin_api/vpe/vpe.go | 3 ++- core/msg_codec.go | 13 +++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/api/api.go b/api/api.go index afaa8ad..c247417 100644 --- a/api/api.go +++ b/api/api.go @@ -28,6 +28,8 @@ const ( RequestMessage MessageType = iota // ReplyMessage represents a VPP reply message ReplyMessage + // EventMessage represents a VPP notification event message + EventMessage // OtherMessage represents other VPP message (e.g. counters) OtherMessage ) diff --git a/cmd/binapi-generator/generator.go b/cmd/binapi-generator/generator.go index e3efe0f..d8420f9 100644 --- a/cmd/binapi-generator/generator.go +++ b/cmd/binapi-generator/generator.go @@ -38,6 +38,7 @@ type messageType int const ( requestMessage messageType = iota // VPP request message replyMessage // VPP reply message + eventMessage // VPP event message otherMessage // other VPP message ) @@ -260,6 +261,8 @@ func generateMessage(ctx *context, w io.Writer, msg *jsongo.JSONNode, isType boo if ok { if j == 2 { if fieldName == "client_index" { + // "client_index" as the second member, this might be an event message or a request + msgType = eventMessage wasClientIndex = true } else if fieldName == "context" { // reply needs "context" as the second member @@ -465,6 +468,8 @@ func generateMessageTypeGetter(w io.Writer, structName string, msgType messageTy fmt.Fprintln(w, "\treturn api.RequestMessage") } else if msgType == replyMessage { fmt.Fprintln(w, "\treturn api.ReplyMessage") + } else if msgType == eventMessage { + fmt.Fprintln(w, "\treturn api.EventMessage") } else { fmt.Fprintln(w, "\treturn api.OtherMessage") } diff --git a/core/bin_api/vpe/vpe.go b/core/bin_api/vpe/vpe.go index 51a245b..c11f466 100644 --- a/core/bin_api/vpe/vpe.go +++ b/core/bin_api/vpe/vpe.go @@ -1,5 +1,6 @@ +// Code generated by govpp binapi-generator DO NOT EDIT. // Package vpe represents the VPP binary API of the 'vpe' VPP module. -// DO NOT EDIT. Generated from 'bin_api/vpe.api.json' +// Generated from 'bin_api/vpe.api.json' package vpe import "git.fd.io/govpp.git/api" diff --git a/core/msg_codec.go b/core/msg_codec.go index 5614a7e..c72b7f3 100644 --- a/core/msg_codec.go +++ b/core/msg_codec.go @@ -43,6 +43,12 @@ type vppReplyHeader struct { Context uint32 } +// vppEventHeader struct contains header fields implemented by all VPP events. +type vppEventHeader struct { + VlMsgID uint16 + Context uint32 +} + // vppOtherHeader struct contains header fields implemented by other VPP messages (not requests nor replies). type vppOtherHeader struct { VlMsgID uint16 @@ -51,6 +57,7 @@ type vppOtherHeader struct { const ( vppRequestHeaderSize = 10 // size of a VPP request header vppReplyHeaderSize = 6 // size of a VPP reply header + vppEventHeaderSize = 6 // size of a VPP event header vppOtherHeaderSize = 2 // size of the header of other VPP messages ) @@ -68,6 +75,8 @@ func (*MsgCodec) EncodeMsg(msg api.Message, msgID uint16) ([]byte, error) { header = &vppRequestHeader{VlMsgID: msgID} } else if msg.GetMessageType() == api.ReplyMessage { header = &vppReplyHeader{VlMsgID: msgID} + } else if msg.GetMessageType() == api.EventMessage { + header = &vppEventHeader{VlMsgID: msgID} } else { header = &vppOtherHeader{VlMsgID: msgID} } @@ -109,6 +118,8 @@ func (*MsgCodec) DecodeMsg(data []byte, msg api.Message) error { header = &vppRequestHeader{} } else if msg.GetMessageType() == api.ReplyMessage { header = &vppReplyHeader{} + } else if msg.GetMessageType() == api.EventMessage { + header = &vppEventHeader{} } else { header = &vppOtherHeader{} } @@ -128,6 +139,8 @@ func (*MsgCodec) DecodeMsg(data []byte, msg api.Message) error { buf = bytes.NewReader(data[vppRequestHeaderSize:]) } else if msg.GetMessageType() == api.ReplyMessage { buf = bytes.NewReader(data[vppReplyHeaderSize:]) + } else if msg.GetMessageType() == api.EventMessage { + buf = bytes.NewReader(data[vppEventHeaderSize:]) } else { buf = bytes.NewReader(data[vppOtherHeaderSize:]) } -- cgit 1.2.3-korg