Acked-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com>
> -----Mesaj original----- > De la: dev [mailto:dev-boun...@openvswitch.org] În numele Nithin Raju > Trimis: Wednesday, September 23, 2015 7:16 PM > Către: dev@openvswitch.org > Subiect: [ovs-dev] [PATCH 3/4 v2] datapath-windows: return netlink error for > read operation > > The kernel datapath returns a NL error message upon any errors during read > operations, and returns STATUS_SUCCESS as the return code. We reply on > the input NL request to get the family ID, and the PID. However, when the > request is of type OVS_CTRL_CMD_EVENT_NOTIFY and > OVS_CTRL_CMD_READ_NOTIFY, there's no input buffer associated with the > request. So, we use a temporary input buffer to be able to call the Netlink > APIs for constructing the output NL error message. > > Signed-off-by: Nithin Raju <nit...@vmware.com> > Acked-by: Sairam Venugopal <vsai...@vmware.com> > --- > v2: addressed ALin's review comments > --- > datapath-windows/ovsext/Datapath.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > diff --git a/datapath-windows/ovsext/Datapath.c b/datapath- > windows/ovsext/Datapath.c > index 1e16604..b3dbd71 100644 > --- a/datapath-windows/ovsext/Datapath.c > +++ b/datapath-windows/ovsext/Datapath.c > @@ -1020,10 +1020,24 @@ > InvokeNetlinkCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, > if (status != STATUS_SUCCESS && status != STATUS_PENDING) { > if (usrParamsCtx->devOp != OVS_WRITE_DEV_OP && *replyLen == 0) { > NL_ERROR nlError = NlMapStatusToNlErr(status); > - POVS_MESSAGE msgIn = (POVS_MESSAGE)usrParamsCtx- > >inputBuffer; > + OVS_MESSAGE msgInTmp = { 0 }; > + POVS_MESSAGE msgIn = NULL; > POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR) > usrParamsCtx->outputBuffer; > > + if (usrParamsCtx->ovsMsg->genlMsg.cmd == > OVS_CTRL_CMD_EVENT_NOTIFY || > + usrParamsCtx->ovsMsg->genlMsg.cmd == > OVS_CTRL_CMD_READ_NOTIFY) { > + /* There's no input buffer associated with such requests. */ > + NL_BUFFER nlBuffer; > + msgIn = &msgInTmp; > + NlBufInit(&nlBuffer, (PCHAR)msgIn, sizeof *msgIn); > + NlFillNlHdr(&nlBuffer, nlFamilyOps->id, 0, 0, > + usrParamsCtx->ovsInstance->pid); > + } else { > + msgIn = (POVS_MESSAGE)usrParamsCtx->inputBuffer; > + } > + > + ASSERT(msgIn); > ASSERT(msgError); > NlBuildErrorMsg(msgIn, msgError, nlError); > *replyLen = msgError->nlMsg.nlmsgLen; > -- > 1.8.5.6 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev