Hello Nithin, > BOOLEAN validateDp; /* Does command require a valid DP argument. */ > } NETLINK_CMD, *PNETLINK_CMD;
Perhaps a better name would be validateDpIfIndex? Or, is there going to be something more to be validated later on, when validateDp = TRUE? > if (nlFamilyOps->cmds[i].validateDp == TRUE) { > OvsAcquireCtrlLock(); > if (ovsMsg->ovsHdr.dp_ifindex == > (INT)gOvsSwitchContext->dpNo) { > status = STATUS_INVALID_PARAMETER; > OvsReleaseCtrlLock(); > goto done; > } > ... I am not sure... shouldn't it have been: "if (ovsMsg->ovsHdr.dp_ifindex != (INT)gOvsSwitchContext->dpNo)" ? Also, is the dpIfIndex supposed to be given from kernel to userspace (such as, in the DP NEW) or it will be a constant sent from userspace? How is "dp_ifindex" going to be matched with gOvsSwitchContext->dpNo? Thanks, Sam ________________________________________ Date: Thu, 28 Aug 2014 10:59:11 -0700 From: Nithin Raju <nit...@vmware.com> To: dev@openvswitch.org Subject: [ovs-dev] [PATCH 2/4] datapath-windows: make NL version a UIN8 and add a validateDp arg Message-ID: <1409248753-12733-2-git-send-email-nit...@vmware.com> I didn't realize earlier that version in a netlink message was a UINT8. So, fixing that here. Also, some of the commands don't pass a valid DP value. Hence adding a field to identify such commands. Signed-off-by: Nithin Raju <nit...@vmware.com> --- datapath-windows/ovsext/Datapath.c | 74 +++++++++++++++++++----------------- 1 files changed, 39 insertions(+), 35 deletions(-) diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c index 40654f5..8438dd8 100644 --- a/datapath-windows/ovsext/Datapath.c +++ b/datapath-windows/ovsext/Datapath.c @@ -73,13 +73,15 @@ typedef struct _NETLINK_CMD { UINT16 cmd; NetlinkCmdHandler handler; UINT32 supportedDevOp; /* Supported device operations. */ + BOOLEAN validateDp; /* Does command require a valid DP argument. */ } NETLINK_CMD, *PNETLINK_CMD; /* A netlink family is a group of commands. */ typedef struct _NETLINK_FAMILY { CHAR *name; UINT32 id; - UINT16 version; + UINT8 version; + UINT8 pad; UINT16 maxAttr; NETLINK_CMD *cmds; /* Array of netlink commands and handlers. */ UINT16 opsCount; @@ -109,16 +111,17 @@ static NTSTATUS OvsGetPidCmdHandler(PIRP irp, PFILE_OBJECT fileObject, /* Netlink control family: this is a Windows specific family. */ NETLINK_CMD nlControlFamilyCmdOps[] = { - { OVS_CTRL_CMD_WIN_GET_PID, OvsGetPidCmdHandler, OVS_TRANSACTION_DEV_OP, } + { OVS_CTRL_CMD_WIN_GET_PID, OvsGetPidCmdHandler, + OVS_TRANSACTION_DEV_OP, FALSE } }; NETLINK_FAMILY nlControlFamilyOps = { - OVS_WIN_CONTROL_FAMILY, - OVS_WIN_NL_CTRL_FAMILY_ID, - OVS_WIN_CONTROL_VERSION, - OVS_WIN_CONTROL_ATTR_MAX, - nlControlFamilyCmdOps, - ARRAY_SIZE(nlControlFamilyCmdOps) + .name = OVS_WIN_CONTROL_FAMILY, + .id = OVS_WIN_NL_CTRL_FAMILY_ID, + .version = OVS_WIN_CONTROL_VERSION, + .maxAttr = OVS_WIN_CONTROL_ATTR_MAX, + .cmds = nlControlFamilyCmdOps, + .opsCount = ARRAY_SIZE(nlControlFamilyCmdOps) }; @@ -126,45 +129,45 @@ NETLINK_FAMILY nlControlFamilyOps = { /* Netlink packet family. */ /* XXX: Add commands here. */ NETLINK_FAMILY nlPacketFamilyOps = { - OVS_PACKET_FAMILY, - OVS_WIN_NL_PACKET_FAMILY_ID, - OVS_PACKET_VERSION, - OVS_PACKET_ATTR_MAX, - NULL, /* XXX: placeholder. */ - 0 + .name = OVS_PACKET_FAMILY, + .id = OVS_WIN_NL_PACKET_FAMILY_ID, + .version = OVS_PACKET_VERSION, + .maxAttr = OVS_PACKET_ATTR_MAX, + .cmds = NULL, /* XXX: placeholder. */ + .opsCount = 0 }; /* Netlink datapath family. */ /* XXX: Add commands here. */ NETLINK_FAMILY nlDatapathFamilyOps = { - OVS_DATAPATH_FAMILY, - OVS_WIN_NL_DATAPATH_FAMILY_ID, - OVS_DATAPATH_VERSION, - OVS_DP_ATTR_MAX, - NULL, /* XXX: placeholder. */ - 0 + .name = OVS_DATAPATH_FAMILY, + .id = OVS_WIN_NL_DATAPATH_FAMILY_ID, + .version = OVS_DATAPATH_VERSION, + .maxAttr = OVS_DP_ATTR_MAX, + .cmds = NULL, /* XXX: placeholder. */ + .opsCount = 0 }; /* Netlink vport family. */ /* XXX: Add commands here. */ NETLINK_FAMILY nlVportFamilyOps = { - OVS_VPORT_FAMILY, - OVS_WIN_NL_VPORT_FAMILY_ID, - OVS_VPORT_VERSION, - OVS_VPORT_ATTR_MAX, - NULL, /* XXX: placeholder. */ - 0 + .name = OVS_VPORT_FAMILY, + .id = OVS_WIN_NL_VPORT_FAMILY_ID, + .version = OVS_VPORT_VERSION, + .maxAttr = OVS_VPORT_ATTR_MAX, + .cmds = NULL, /* XXX: placeholder. */ + .opsCount = 0 }; /* Netlink flow family. */ /* XXX: Add commands here. */ NETLINK_FAMILY nlFLowFamilyOps = { - OVS_FLOW_FAMILY, - OVS_WIN_NL_FLOW_FAMILY_ID, - OVS_FLOW_VERSION, - OVS_FLOW_ATTR_MAX, - NULL, /* XXX: placeholder. */ - 0 + .name = OVS_FLOW_FAMILY, + .id = OVS_WIN_NL_FLOW_FAMILY_ID, + .version = OVS_FLOW_VERSION, + .maxAttr = OVS_FLOW_ATTR_MAX, + .cmds = NULL, /* XXX: placeholder. */ + .opsCount = 0 }; static NTSTATUS @@ -713,10 +716,11 @@ ValidateNetlinkCmd(UINT32 devOp, goto done; } - /* Validate the DP for commands where the DP is actually set. */ - if (ovsMsg->genlMsg.cmd != OVS_CTRL_CMD_WIN_GET_PID) { + /* Validate the DP for commands that require a DP. */ + if (nlFamilyOps->cmds[i].validateDp == TRUE) { OvsAcquireCtrlLock(); - if (ovsMsg->ovsHdr.dp_ifindex == (INT)gOvsSwitchContext->dpNo) { + if (ovsMsg->ovsHdr.dp_ifindex == + (INT)gOvsSwitchContext->dpNo) { status = STATUS_INVALID_PARAMETER; OvsReleaseCtrlLock(); goto done; -- 1.7.4.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev