[ovs-dev] [PATCH 1/4] Add extentions to the standard datapath interface

Saurabh Shah ssaurabh at vmware.com
Fri Aug 15 00:01:00 UTC 2014



> -----Original Message-----
> From: dev [mailto:dev-bounces at openvswitch.org] On Behalf Of Nithin Raju
> Sent: Wednesday, August 13, 2014 7:12 PM
> To: dev at openvswitch.org
> Subject: [ovs-dev] [PATCH 1/4] Add extentions to the standard datapath
> interface
> 
> The datapath interface defined in odp-netlink.h needs some extensions that
> are platform dependent. Some examples are the name of the
> communication device on Windows and a set of commands that are specific
> to Windows.
> 
> In this change we define a include/odp-netlink-ext.h to in turn include any
> platform specific interface extensions.
> For Windows datapath, the extensions are defined in a new header:
> datapath-windows/include/OvsDpInterfaceExt.h.
> 
> The file odp-netlink-ext.h is not an auto-generated file unlke odp-netlink.h.
> In the future, we can possibly auto-generate it based on
> OvsDpInterfaceExt.h.
> 
> Also, we define three ioctls in OvsDpInterfaceExt.h:
> read:     provides an output buffer (mimics a recv)
> write:    provides an input buffer (mimics a send)
> transact: provides an input and optionally an output buffer.
>           (mimics a send followed by recv)
> 
> Signed-off-by: Nithin Raju <nithin at vmware.com>
> ---
>  datapath-windows/automake.mk                 |    1 +
>  datapath-windows/include/OvsDpInterfaceExt.h |   68
> ++++++++++++++++++++++++++
>  datapath-windows/ovsext/ovsext.vcxproj       |    3 +-
>  include/automake.mk                          |    3 +
>  include/odp-netlink-ext.h                    |   23 +++++++++
>  5 files changed, 97 insertions(+), 1 deletions(-)  create mode 100644
> datapath-windows/include/OvsDpInterfaceExt.h
>  create mode 100644 include/odp-netlink-ext.h
> 
> diff --git a/datapath-windows/automake.mk b/datapath-
> windows/automake.mk index 6131de0..3fd6692 100644
> --- a/datapath-windows/automake.mk
> +++ b/datapath-windows/automake.mk
> @@ -3,6 +3,7 @@ EXTRA_DIST += \
>  	datapath-windows/DESIGN \
>  	datapath-windows/Package/package.VcxProj \
>  	datapath-windows/Package/package.VcxProj.user \
> +	datapath-windows/include/OvsDpInterfaceExt.h \
>  	datapath-windows/include/OvsNetlink.h \
>  	datapath-windows/include/OvsPub.h \
>  	datapath-windows/misc/install.cmd \
> diff --git a/datapath-windows/include/OvsDpInterfaceExt.h b/datapath-
> windows/include/OvsDpInterfaceExt.h
> new file mode 100644
> index 0000000..f3339e6
> --- /dev/null
> +++ b/datapath-windows/include/OvsDpInterfaceExt.h
> @@ -0,0 +1,68 @@
> +/*
> + * Copyright (c) 2014 VMware, Inc.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at:
> + *
> + *
> https://urldefense.proofpoint.com/v1/url?u=http://www.apache.org/licens
> es/LICENSE-
> 2.0&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=pEkjsHfytvHEWufeZPp
> gqSOJMdMjuZPbesVsNhCUc0E%3D%0A&m=omBZT4QodVa6B%2BwXTfsQEl
> W42Wc%2FuyUrs%2BZxhR%2FVHH0%3D%0A&s=67ea4b6a708e8dc8522d509
> 0cca08bf4be5d7efdf9d48b9f8bfc200fee05326b
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +#ifndef __OVS_DP_INTERFACE_EXT_H_
> +#define __OVS_DP_INTERFACE_EXT_H_ 1
> +
> +/* Windows kernel datapath extensions to the standard datapath
> +interface. */
> +
> +/* Name of the device. */
> +#define OVS_DEVICE_NAME_NT     L"\\Device\\OpenVSwitchDevice"
> +#define OVS_DEVICE_NAME_DOS    L"\\DosDevices\\OpenVSwitchDevice"
> +#define OVS_DEVICE_NAME_USER   TEXT("\\\\.\\OpenVSwitchDevice")
> +

Should be "OpenvSwitchDevice".

> +#define OVS_IOCTL_DEVICE_TYPE 45000
> +
> +/* We used Direct I/O (zero copy) for the buffers. */
> +#define OVS_IOCTL_START   0x100
> +#define OVS_IOCTL_READ \
> +    CTL_CODE (OVS_IOCTL_DEVICE_TYPE, OVS_IOCTL_START + 0x0,
> METHOD_OUT_DIRECT,\
> +              FILE_READ_ACCESS)
> +#define OVS_IOCTL_WRITE \
> +    CTL_CODE (OVS_IOCTL_DEVICE_TYPE, OVS_IOCTL_START + 0x1,
> METHOD_IN_DIRECT,\
> +              FILE_READ_ACCESS)
> +#define OVS_IOCTL_TRANSACT \
> +    CTL_CODE (OVS_IOCTL_DEVICE_TYPE, OVS_IOCTL_START + 0x2,
> METHOD_OUT_DIRECT,\
> +              FILE_WRITE_ACCESS)
> +
> +/*
> + * On platforms that support netlink natively, the operating system
> +assigns a
> + * dynamic value to a netlink family when it is registered. In the
> +absense of
> + * such mechanism, defined hard-coded values that are known both to
> +userspace
> + * and kernel.
> + */
> +#define OVS_WIN_NL_INVALID_FAMILY_ID         0
> +#define OVS_WIN_NL_CTRL_FAMILY_ID            1
> +#define OVS_WIN_NL_DATAPATH_FAMILY_ID        2
> +#define OVS_WIN_NL_PACKET_FAMILY_ID          3
> +#define OVS_WIN_NL_VPORT_FAMILY_ID           4
> +#define OVS_WIN_NL_FLOW_FAMILY_ID            5
> +
> +/*
> + * Define a family of netlink command specific to Windows. This is part
> +of the
> + * extensions.
> + */
> +#define OVS_WIN_CONTROL_FAMILY   "ovs_win_control"
> +#define OVS_WIN_CONTROL_MCGROUP  "ovs_win_control"
> +#define OVS_WIN_CONTROL_VERSION  1
> +#define OVS_WIN_CONTROL_ATTR_MAX (__OVS_FLOW_ATTR_MAX - 1)
> +
> +/* Commands available under the OVS_WIN_CONTROL_FAMILY. */ enum
> +ovs_win_control_cmd {
> +    OVS_CTRL_CMD_WIN_GET_PID,
> +};
> +
> +#endif /* __OVS_DP_INTERFACE_EXT_H_ */
> diff --git a/datapath-windows/ovsext/ovsext.vcxproj b/datapath-
> windows/ovsext/ovsext.vcxproj
> index 9728f20..4febef6 100644
> --- a/datapath-windows/ovsext/ovsext.vcxproj
> +++ b/datapath-windows/ovsext/ovsext.vcxproj
> @@ -70,6 +70,7 @@
>      <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
> Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
> />
>    </ImportGroup>
>    <ItemGroup Label="WrappedTaskItems">
> +    <ClInclude Include="..\include\OvsDpInterfaceExt.h" />
>      <ClInclude Include="OvsAtomic.h" />
>      <ClInclude Include="OvsBufferMgmt.h" />
>      <ClInclude Include="OvsChecksum.h" /> @@ -161,4 +162,4 @@
>      <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
>    </ItemGroup>
>    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> -</Project>
> \ No newline at end of file
> +</Project>
> diff --git a/include/automake.mk b/include/automake.mk index
> 55cb353..19c3b43 100644
> --- a/include/automake.mk
> +++ b/include/automake.mk
> @@ -6,6 +6,9 @@ include/odp-netlink.h:
> datapath/linux/compat/include/linux/openvswitch.h \  EXTRA_DIST += build-
> aux/extract-odp-netlink-h  CLEANFILES += include/odp-netlink.h
> 
> +noinst_HEADERS += \
> +	include/odp-netlink-ext.h
> +
>  include include/openflow/automake.mk
>  include include/openvswitch/automake.mk  include
> include/sparse/automake.mk diff --git a/include/odp-netlink-ext.h
> b/include/odp-netlink-ext.h new file mode 100644 index 0000000..847a17b
> --- /dev/null
> +++ b/include/odp-netlink-ext.h
> @@ -0,0 +1,23 @@
> +/*
> + * Copyright (c) 2014 VMware, Inc.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at:
> + *
> + *
> https://urldefense.proofpoint.com/v1/url?u=http://www.apache.org/licens
> es/LICENSE-
> 2.0&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=pEkjsHfytvHEWufeZPp
> gqSOJMdMjuZPbesVsNhCUc0E%3D%0A&m=omBZT4QodVa6B%2BwXTfsQEl
> W42Wc%2FuyUrs%2BZxhR%2FVHH0%3D%0A&s=67ea4b6a708e8dc8522d509
> 0cca08bf4be5d7efdf9d48b9f8bfc200fee05326b
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +/*
> + * Header file to include platform-specific extensions to the standard
> + * datapath interface defined in odp-netlink.h.
> + */
> +#ifdef _WIN32
> +#include "OvsDpInterfaceExt.h"
> +#endif

Since we define & control the dp interface, why not just include OvsDpInterfaceExt.h directly? (Just like what we used to do earlier by including OvsPub.h.)

> --
> 1.7.4.1
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://urldefense.proofpoint.com/v1/url?u=http://openvswitch.org/mailm
> an/listinfo/dev&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=pEkjsHfytv
> HEWufeZPpgqSOJMdMjuZPbesVsNhCUc0E%3D%0A&m=omBZT4QodVa6B%
> 2BwXTfsQElW42Wc%2FuyUrs%2BZxhR%2FVHH0%3D%0A&s=6457c6d8230ec7
> c56cb258407c46f4b918150b1b5b09a50cff8bd5d158e690d9



More information about the dev mailing list