[ovs-dev] [PATCH 3/4] datapath-windows: Update packet policies
Alin Serdean
aserdean at cloudbasesolutions.com
Mon Jul 13 15:26:59 UTC 2015
Update netlink attribute parsing to use the appropriate policy array size.
This patch also initialize all netlink attributes before parsing them.
Signed-off-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>
---
datapath-windows/ovsext/User.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c
index 9f462cf..49ebca1 100644
--- a/datapath-windows/ovsext/User.c
+++ b/datapath-windows/ovsext/User.c
@@ -47,7 +47,7 @@ OVS_USER_STATS ovsUserStats;
static VOID _MapNlAttrToOvsPktExec(PNL_ATTR *nlAttrs, PNL_ATTR *keyAttrs,
OvsPacketExecute *execute);
-extern NL_POLICY nlFlowKeyPolicy[];
+extern NL_POLICY nlFlowKeyPolicy[__OVS_KEY_ATTR_MAX];
static __inline VOID
OvsAcquirePidHashLock()
@@ -317,16 +317,13 @@ OvsNlExecuteCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
PGENL_MSG_HDR genlMsgHdr = &(msgIn->genlMsg);
POVS_HDR ovsHdr = &(msgIn->ovsHdr);
- PNL_ATTR nlAttrs[__OVS_PACKET_ATTR_MAX];
- PNL_ATTR keyAttrs[__OVS_KEY_ATTR_MAX] = {NULL};
-
UINT32 attrOffset = NLMSG_HDRLEN + GENL_HDRLEN + OVS_HDRLEN;
UINT32 keyAttrOffset = 0;
OvsPacketExecute execute;
NL_ERROR nlError = NL_ERROR_SUCCESS;
NL_BUFFER nlBuf;
- static const NL_POLICY nlPktExecPolicy[] = {
+ static const NL_POLICY nlPktExecPolicy[__OVS_PACKET_ATTR_MAX] = {
[OVS_PACKET_ATTR_PACKET] = {.type = NL_A_UNSPEC, .optional = FALSE},
[OVS_PACKET_ATTR_KEY] = {.type = NL_A_UNSPEC, .optional = FALSE},
[OVS_PACKET_ATTR_ACTIONS] = {.type = NL_A_UNSPEC, .optional = FALSE},
@@ -334,12 +331,14 @@ OvsNlExecuteCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
[OVS_PACKET_ATTR_EGRESS_TUN_KEY] = {.type = NL_A_UNSPEC,
.optional = TRUE}
};
+ PNL_ATTR pktAttrs[ARRAY_SIZE(nlPktExecPolicy)] = { NULL };
+ PNL_ATTR keyAttrs[ARRAY_SIZE(nlFlowKeyPolicy)] = { NULL };
RtlZeroMemory(&execute, sizeof(OvsPacketExecute));
/* Get all the top level Flow attributes */
if ((NlAttrParse(nlMsgHdr, attrOffset, NlMsgAttrsLen(nlMsgHdr),
- nlPktExecPolicy, nlAttrs, ARRAY_SIZE(nlAttrs)))
+ nlPktExecPolicy, pktAttrs, ARRAY_SIZE(nlPktExecPolicy)))
!= TRUE) {
OVS_LOG_ERROR("Attr Parsing failed for msg: %p",
nlMsgHdr);
@@ -347,14 +346,14 @@ OvsNlExecuteCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
goto done;
}
- keyAttrOffset = (UINT32)((PCHAR)nlAttrs[OVS_PACKET_ATTR_KEY] -
+ keyAttrOffset = (UINT32)((PCHAR) pktAttrs[OVS_PACKET_ATTR_KEY] -
(PCHAR)nlMsgHdr);
/* Get flow keys attributes */
if ((NlAttrParseNested(nlMsgHdr, keyAttrOffset,
- NlAttrLen(nlAttrs[OVS_PACKET_ATTR_KEY]),
+ NlAttrLen(pktAttrs[OVS_PACKET_ATTR_KEY]),
nlFlowKeyPolicy, keyAttrs,
- ARRAY_SIZE(keyAttrs))) != TRUE) {
+ ARRAY_SIZE(nlFlowKeyPolicy))) != TRUE) {
OVS_LOG_ERROR("Key Attr Parsing failed for msg: %p", nlMsgHdr);
status = STATUS_UNSUCCESSFUL;
goto done;
@@ -362,7 +361,7 @@ OvsNlExecuteCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
execute.dpNo = ovsHdr->dp_ifindex;
- _MapNlAttrToOvsPktExec(nlAttrs, keyAttrs, &execute);
+ _MapNlAttrToOvsPktExec(pktAttrs, keyAttrs, &execute);
status = OvsExecuteDpIoctl(&execute);
--
1.9.5.msysgit.0
More information about the dev
mailing list