Acked-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com>
-----Mesaj original----- De la: dev [mailto:dev-boun...@openvswitch.org] În numele Eitan Eliahu Trimis: Tuesday, October 21, 2014 4:23 AM Către: dev@openvswitch.org Subiect: [ovs-dev] [PATCH] datapath-windows: Missed packet, Kernel to User mode notification An I/O request is queued in Kernel to be completed upon a packet mismatch. This mechanism is similar to the port state notification. Access to instance data should be under a lock (TBD) Signed-off-by: Eitan Eliahu <elia...@vmware.com> --- datapath-windows/include/OvsDpInterfaceExt.h | 1 + datapath-windows/ovsext/Datapath.c | 30 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/datapath-windows/include/OvsDpInterfaceExt.h b/datapath-windows/include/OvsDpInterfaceExt.h index 953c8ba..cea9e41 100644 --- a/datapath-windows/include/OvsDpInterfaceExt.h +++ b/datapath-windows/include/OvsDpInterfaceExt.h @@ -77,6 +77,7 @@ enum ovs_win_control_cmd { OVS_CTRL_CMD_WIN_GET_PID, OVS_CTRL_CMD_WIN_PEND_REQ, + OVS_CTRL_CMD_WIN_PEND_PACKET_REQ, OVS_CTRL_CMD_MC_SUBSCRIBE_REQ, OVS_CTRL_CMD_PACKET_SUBSCRIBE_REQ, diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c index fae824a..79e7c7d 100644 --- a/datapath-windows/ovsext/Datapath.c +++ b/datapath-windows/ovsext/Datapath.c @@ -91,6 +91,7 @@ typedef struct _NETLINK_FAMILY { /* Handlers for the various netlink commands. */ static NetlinkCmdHandler OvsGetPidCmdHandler, OvsPendEventCmdHandler, + OvsPendPacketCmdHandler, OvsSubscribeEventCmdHandler, OvsSubscribePacketCmdHandler, OvsReadEventCmdHandler, @@ -131,6 +132,11 @@ NETLINK_CMD nlControlFamilyCmdOps[] = { .supportedDevOp = OVS_WRITE_DEV_OP, .validateDpIndex = TRUE, }, + { .cmd = OVS_CTRL_CMD_WIN_PEND_PACKET_REQ, + .handler = OvsPendPacketCmdHandler, + .supportedDevOp = OVS_WRITE_DEV_OP, + .validateDpIndex = TRUE, + }, { .cmd = OVS_CTRL_CMD_MC_SUBSCRIBE_REQ, .handler = OvsSubscribeEventCmdHandler, .supportedDevOp = OVS_WRITE_DEV_OP, @@ -2399,4 +2405,28 @@ OvsSubscribePacketCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, done: return status; } + +/* + * +----------------------------------------------------------------------- +--- + * Handler for queueing an IRP used for missed packet notification. The +IRP is + * completed when a packet received and mismatched. STATUS_PENDING is +returned + * on success. User mode keep a pending IRP at all times. + * +----------------------------------------------------------------------- +--- + */ +static NTSTATUS +OvsPendPacketCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, + UINT32 *replyLen) { + UNREFERENCED_PARAMETER(replyLen); + + POVS_OPEN_INSTANCE instance = + (POVS_OPEN_INSTANCE)usrParamsCtx->ovsInstance; + + /* + * XXX access to packet queue must be through acquiring a lock as user mode + * could unsubscribe and the instnace will be freed. + */ + return OvsWaitDpIoctl(usrParamsCtx->irp, instance->fileObject); } + #endif /* OVS_USE_NL_INTERFACE */ -- 1.9.4.msysgit.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev