diff --git a/dp-core/vr_message.c b/dp-core/vr_message.c index b8a9b731d..e2bd0858e 100644 --- a/dp-core/vr_message.c +++ b/dp-core/vr_message.c @@ -53,6 +53,8 @@ vr_mtrans_free(void *buf) int vr_message_request(struct vr_message *message) { + int ret; + if (!message_h.vm_proto) return 0; @@ -66,8 +68,11 @@ vr_message_request(struct vr_message *message) return -EBADFD; #endif - message_h.vm_proto->mproto_decode(message->vr_message_buf, + ret = message_h.vm_proto->mproto_decode(message->vr_message_buf, message->vr_message_len, NULL, NULL); + if (ret < 0) + return ret; + return 0; } diff --git a/dp-core/vr_sandesh.c b/dp-core/vr_sandesh.c index 6ec20cd52..627a16c74 100644 --- a/dp-core/vr_sandesh.c +++ b/dp-core/vr_sandesh.c @@ -129,8 +129,8 @@ sandesh_proto_decode(char *buf, unsigned int len, { int ret = 0; - sandesh_decode((unsigned char *)buf, len, vr_find_sandesh_info, &ret); - return ret; + return sandesh_decode((unsigned char *)buf, len, + vr_find_sandesh_info, &ret); } static struct vr_mproto sandesh_mproto = { diff --git a/dpdk/vr_dpdk_netlink.c b/dpdk/vr_dpdk_netlink.c index bb2fda663..e82b54b51 100644 --- a/dpdk/vr_dpdk_netlink.c +++ b/dpdk/vr_dpdk_netlink.c @@ -84,11 +84,15 @@ int dpdk_netlink_receive(void *usockp, char *nl_buf, unsigned int nl_len) { + int ret; struct vr_message request; request.vr_message_buf = nl_buf + HDR_LEN; request.vr_message_len = nl_len - HDR_LEN; - vr_message_request(&request); + + ret = vr_message_request(&request); + if (ret < 0) + vr_send_response(ret); dpdk_nl_process_response(usockp, (struct nlmsghdr *)nl_buf); diff --git a/linux/vr_genetlink.c b/linux/vr_genetlink.c index 1e8b87cda..23b6292fc 100644 --- a/linux/vr_genetlink.c +++ b/linux/vr_genetlink.c @@ -17,6 +17,7 @@ #include "vr_types.h" #include "vr_message.h" #include "sandesh.h" +#include "vr_response.h" static int netlink_trans_request(struct sk_buff *, struct genl_info *); @@ -81,6 +82,7 @@ static int netlink_trans_request(struct sk_buff *in_skb, struct genl_info *info) { char *buf; + int ret; unsigned int len; uint32_t multi_flag; struct nlmsghdr *rep, *nlh = info->nlhdr; @@ -97,7 +99,11 @@ netlink_trans_request(struct sk_buff *in_skb, struct genl_info *info) request.vr_message_buf = nla_data(nla); request.vr_message_len = nla_len(nla); - vr_message_request(&request); + ret = vr_message_request(&request); + if (ret < 0) { + if (vr_send_response(ret)) + return ret; + } #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)) netlink_id = NETLINK_CB(in_skb).pid;