summaryrefslogtreecommitdiff
path: root/Documentation
Commit message (Collapse)AuthorAgeFilesLines
* doc: Remove tutorials/ovn-basics.Russell Bryant2017-01-234-977/+0
| | | | | | | | | | | | | | | | | | The only thing worse than a lack of documentation is incorrect or out-of-date documentation. Over time, this document has not kept up with the pace of OVN and is no longer a good current resource. For a sandbox based tutorial like this, I'd like to start over using ovn-trace as the basis. An even more important type of tutorial would be something along the lines of: http://blog.spinhirne.com/p/blog-series.html That blog series was fantastic and has been the primary tutorial reference I have been sending people to since it was written. Signed-off-by: Russell Bryant <russell@ovn.org> Acked-by: Ben Pfaff <blp@ovn.org>
* Documentation: Update DPDK doc after port naming change.Daniele Di Proietto2017-01-192-36/+43
| | | | | | | | | | | | options:dpdk-devargs is always required now. This commit also changes some of the names from 'dpdk0' to various others. netdev-dpdk/detach accepts a PCI id instead of a port name. CC: Ciara Loftus <ciara.loftus@intel.com> Fixes: 55e075e65ef9("netdev-dpdk: Arbitrary 'dpdk' port naming") Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com> Acked-by: Ciara Loftus <ciara.loftus@intel.com>
* faq: Document OVS packet buffering.Ben Pfaff2017-01-181-0/+32
| | | | | | | We get questions about this sometimes. Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Jarno Rajahalme <jarno@ovn.org>
* configuration.rst: Update the example of DPDK port's configurationBinbin Xu2017-01-181-4/+3
| | | | | | | | After the hotplug of DPDK ports, a valid dpdk-devargs must be specified. Otherwise, the DPDK device can't be available. Signed-off-by: Binbin Xu <xu.binbin1@zte.com.cn> Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* libX: add new release / version info tagsAaron Conole2017-01-184-0/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit uses the $PACKAGE_VERSION automake variable to construct a release and version info combination which sets the library name to be: libfoo-$(OVS_MAJOR_VERSION).so.$(OVS_MINOR_VERSION).0.$(OVS_MICRO_VERSION) where formerly, it was always: libfoo.so.1.0.0 This allows releases of Open vSwitch libraries to reflect which specific versions they came with, and sets up a psuedo ABI-versioning scheme. In this fashion, future releases of Open vSwitch could be installed alongside older releases, allowing 3rd party utilities linked against previous versions to continue to function. ex: $ ldd /path/to/utility linux-vdso.so.1 (0x00007ffe92cf6000) libopenvswitch-2.so.6 => /lib64/libopenvswitch-2.so.6 (0x00007f733b7a3000) libssl.so.10 => /lib64/libssl.so.10 (0x00007f733b530000) ... Note the library name and version information. Signed-off-by: Aaron Conole <aconole@redhat.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
* vlan.rst: Strip leftover HTML.Russell Bryant2017-01-171-1/+1
| | | | | | | | Strip a couple of closing HTML tags that were left over from when this doc was converted from the web site to RST. Signed-off-by: Russell Bryant <russell@ovn.org> Acked-by: Ben Pfaff <blp@ovn.org>
* ofproto-dpif: Make ofproto/trace output easier to read.Ben Pfaff2017-01-121-100/+168
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | "ovs-appctl ofproto/trace" is invaluable for debugging, but as the users of Open vSwitch have evolved it has failed to keep up with the times. It's pretty easy to design OpenFlow tables and pipelines that resubmit dozens of times. Each resubmit causes an additional tab of indentation, so the output wraps around, sometimes again and again, and makes the output close to unreadable. ovn-trace pioneered better formatting for tracing in OVN logical datapaths, mostly by not increasing indentation for tail recursion, which in practice gets rid of almost all indentation. This commit experiments with redoing ofproto/trace the same way. Try looking at, for example, the testsuite output for test 2282 "ovn -- 3 HVs, 3 LRs connected via LS, source IP based routes". Without this commit, it indents 61 levels (488 spaces!). With this commit, it indents 1 level (4 spaces) and it's possible to actually understand what's going on almost at a glance. To see this for yourself, try the following command either with or without this commit (but be sure to keep the change to ovn.at that adds an ofproto/trace to the test): make check TESTSUITEFLAGS='-d 2282' && less tests/testsuite.dir/2282/testsuite.log Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Lance Richardson <lrichard@redhat.com> Acked-by: Justin Pettit <jpettit@ovn.org>
* netdev-dpdk: Add support for virtual DPDK PMDs (vdevs)Ciara Loftus2017-01-051-0/+29
| | | | | | | | | | | | | | | | | | | Prior to this commit, the 'dpdk' port type could only be used for physical DPDK devices. Now, virtual devices (or 'vdevs') are supported. 'vdev' devices are those which use virtual DPDK Poll Mode Drivers eg. null, pcap. To add a DPDK vdev, a valid 'dpdk-devargs' must be set for the given dpdk port. The format expected is 'eth_<driver_name><x>' where 'x' is a number between 0 and RTE_MAX_ETHPORTS -1. For example to add a port that uses the 'null' DPDK PMD driver: ovs-vsctl set Interface null0 options:dpdk-devargs=eth_null0 Not all DPDK vdevs have been verified to work at this point in time. Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Acked-by: Stephen Finucane <stephen@that.guru> # docs only Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* netdev-dpdk: Arbitrary 'dpdk' port namingCiara Loftus2017-01-052-6/+10
| | | | | | | | | | | | | | | | | | | | | | | 'dpdk' ports no longer have naming restrictions. Now, instead of specifying the dpdk port ID as part of the name, the PCI address of the device must be specified via the 'dpdk-devargs' option. eg. ovs-vsctl add-port br0 my-port ovs-vsctl set Interface my-port type=dpdk options:dpdk-devargs=0000:06:00.3 The user must no longer hotplug attach DPDK ports by issuing the specific ovs-appctl netdev-dpdk/attach command. The hotplug is now automatically invoked when a valid PCI address is set in the dpdk-devargs. The format for ovs-appctl netdev-dpdk/detach command has changed in that the user now must specify the relevant PCI address as input instead of the port name. Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Signed-off-by: Kevin Traynor <ktraynor@redhat.com> Co-authored-by: Kevin Traynor <ktraynor@redhat.com> Acked-by: Stephen Finucane <stephen@that.guru> # docs only Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* netdev-dpdk: add hotplug supportMauricio Vásquez2017-01-051-0/+27
| | | | | | | | | | | | | | | | | | | In order to use dpdk ports in ovs they have to be bound to a DPDK compatible driver before ovs is started. This patch adds the possibility to hotplug (or hot-unplug) a device after ovs has been started. The implementation adds two appctl commands: netdev-dpdk/attach and netdev-dpdk/detach After the user attaches a new device, it has to be added to a bridge using the add-port command, similarly, before detaching a device, it has to be removed using the del-port command. Signed-off-by: Mauricio Vasquez B <mauricio.vasquezbernal@studenti.polito.it> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Co-authored-by: Ciara Loftus <ciara.loftus@intel.com> Acked-by: Stephen Finucane <stephen@that.guru> # docs only Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* docs: Fix formatting of patch comments line.Joe Stringer2017-01-051-1/+1
| | | | | | | | | | Sphinx was formatting the `---` as an extended dash, not verbatim as three hyphens (which is what is necessary for git to determine that it's a comment, and ignore it when applying the patch). Signed-off-by: Joe Stringer <joe@ovn.org> Acked-by: Ben Pfaff <blp@ovn.org> Acked-by: Stephen Finucane <stephen@that.guru>
* ovs-ofctl.8: Document automatic helper assignment.Joe Stringer2017-01-051-0/+9
| | | | | | | | | | | | Due to upstream Linux feature "automatic helper assignment", up until recently when using ct() action with FTP traffic, it has not been necessary to specify the ALG parameter. However, automatic helper assignment was disabled in Linux 4.7 or later, in upstream commit 3bb398d925ec ("netfilter: nf_ct_helper: disable automatic helper assignment"). Document the need for this. Signed-off-by: Joe Stringer <joe@ovn.org> Acked-by: Jarno Rajahalme <jarno@ovn.org>
* doc: Remove ivshmem instructions.Kevin Traynor2017-01-046-107/+2
| | | | | | | | | | | | | | | | | | | | | | | | ivshmem is a path to the guest using DPDK rings that was introduced before userspace vhost was available in the OVS-DPDK datapath. ivshmem is external to OVS but the scheme of using it with DPDK rings is documented. Remove ivshmem instruction documentation because: - The ivshmem library has been removed in DPDK since DPDK 16.11. - The instructions/scheme provided will not work with current supported and future DPDK versions. - The linked patch needed to enable support in QEMU has never been upstreamed and does not apply to the last 4 QEMU releases. - Userspace vhost has become the defacto OVS-DPDK path to the guest. Fixes: 04de404e1bfa ("netdev-dpdk: Add support for DPDK 16.11") Cc: Ciara Loftus <ciara.loftus@intel.com> Cc: Stephen Finucane <stephen@that.guru> Signed-off-by: Kevin Traynor <ktraynor@redhat.com> Acked-by: Stephen Finucane <stephen@that.guru> Acked-by: Mauricio Vasquez B <mauricio.vasquez@polito.it> Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* doc: Don't limit ourselves to flake8 2.xStephen Finucane2017-01-041-8/+4
| | | | | | | | | | | There was a bug when using hacking with flake8 3.x. This bug has since been resolved [1], meaning we no longer need to call out the need to use the older version of flake8. [1] https://review.openstack.org/#/c/335965/ Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* make: Check for Sphinx before checking docsStephen Finucane2017-01-041-2/+5
| | | | | Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* make: Add distinct clean-docs targetStephen Finucane2017-01-041-1/+7
| | | | | | | | Speed things up by not rebuilding documents every time. Signed-off-by: Stephen Finucane <stephen@that.guru> [blp@ovn.org eliminated "rm -rf $(var)/*" syntax] Signed-off-by: Ben Pfaff <blp@ovn.org>
* make: Validate documents on buildStephen Finucane2017-01-042-3/+13
| | | | | | | | | | | | | | | Build documentation as part of every build. This ensures any syntax errors are caught early. In addition, a 'check-docs' target is added to validates all external links. The nitpick ('-n') flag is added to ensure all possible warnings are raised. Signed-off-by: Stephen Finucane <stephen@that.guru> [blp@ovn.org folded in changes for --enable-silent-rules] Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Add missing ':'Stephen Finucane2017-01-041-1/+1
| | | | | Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Use ovs themeStephen Finucane2017-01-042-5/+18
| | | | | | | | | | | | | | The recently published 'ovs' theme [1] copies the styling of the Open vSwitch website. Start using this, with fallbacks for users who do not have the package installed. This extends support for building docs to users of Sphinx 1.2 as the previous theme - bizstyle - was only available in 1.3+. [1] https://pypi.python.org/pypi/ovs-sphinx-theme Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* netdev-dpdk: Enable Rx checksum offloading feature on DPDK physical ports.Sugesh Chandran2017-01-041-0/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add Rx checksum offloading feature support on DPDK physical ports. By default, the Rx checksum offloading is enabled if NIC supports. However, the checksum offloading can be turned OFF either while adding a new DPDK physical port to OVS or at runtime. The rx checksum offloading can be turned off by setting the parameter to 'false'. For eg: To disable the rx checksum offloading when adding a port, 'ovs-vsctl add-port br0 dpdk0 -- \ set Interface dpdk0 type=dpdk options:rx-checksum-offload=false' OR (to disable at run time after port is being added to OVS) 'ovs-vsctl set Interface dpdk0 options:rx-checksum-offload=false' Similarly to turn ON rx checksum offloading at run time, 'ovs-vsctl set Interface dpdk0 options:rx-checksum-offload=true' The Tx checksum offloading support is not implemented due to the following reasons. 1) Checksum offloading and vectorization are mutually exclusive in DPDK poll mode driver. Vector packet processing is turned OFF when checksum offloading is enabled which causes significant performance drop at Tx side. 2) Normally, OVS generates checksum for tunnel packets in software at the 'tunnel push' operation, where the tunnel headers are created. However enabling Tx checksum offloading involves, *) Mark every packets for tx checksum offloading at 'tunnel_push' and recirculate. *) At the time of xmit, validate the same flag and instruct the NIC to do the checksum calculation. In case NIC doesnt support Tx checksum offloading, the checksum calculation has to be done in software before sending out the packets. No significant performance improvement noticed with Tx checksum offloading due to the e overhead of additional validations + non vector packet processing. In some test scenarios, it introduces performance drop too. Rx checksum offloading still offers 8-9% of improvement on VxLAN tunneling decapsulation even though the SSE vector Rx function is disabled in DPDK poll mode driver. Signed-off-by: Sugesh Chandran <sugesh.chandran@intel.com> Acked-by: Jesse Gross <jesse@kernel.org> Acked-by: Pravin B Shelar <pshelar@ovn.org>
* Python tests: Enable python tests on WindowsAlin Balutoiu2017-01-031-0/+7
| | | | | | | | | | | Updated the Readme with additional library required for the python tests. Remove the code which disable python tests to be run on Windows. Signed-off-by: Alin Balutoiu <abalutoiu@cloudbasesolutions.com> Signed-off-by: Gurucharan Shetty <guru@ovn.org>
* lib: Add support for tftp ct helper.Joe Stringer2017-01-031-0/+4
| | | | | | | | | The kernel datapath provides support for TFTP helpers, so add support for this ALG to the commandline and OpenFlow encoding/decoding. Signed-off-by: Joe Stringer <joe@ovn.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com> Acked-by: Ben Pfaff <blp@ovn.org>
* docs: Add FAQ to the main page.Joe Stringer2017-01-031-0/+2
| | | | | | Signed-off-by: Joe Stringer <joe@ovn.org> Acked-by: Stephen Finucane <stephen@that.guru> Acked-by: Ben Pfaff <blp@ovn.org>
* OVN-HA: Fix data loss after OVNDB promotionGuoshuai Li2016-12-301-2/+2
| | | | | | | | | | | | | | | | When master node shuts down, both VIP and OVNDB Master are expected to be moved over to the backup node. However, the VIP must be started after the OVNDB has been promoted. Otherwise, the database content can be whipped out, since the OVSDB running in the backup state can reconnect to the VIP that just moved over, thus removing the database content. See also: http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html/ Pacemaker_Explained/s-resource-ordering.html Signed-off-by: Guoshuai Li <ligs@dtdream.com> Signed-off-by: Andy Zhou <azhou@ovn.org>
* ovs-advanced.rst: Add missing \ to a few examples.Ben Pfaff2016-12-231-3/+3
| | | | | | | | This makes these examples easier to cut and paste into a terminal, and makes them consistent with the other examples. Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Mickey Spiegel <mickeys.dev@gmail.com>
* docs: Resolve broken URLsStephen Finucane2016-12-2313-32/+33
| | | | | | | | These were found using the 'linkcheck' builder. Signed-off-by: Stephen Finucane <stephen@that.guru> Cc: Ben Pfaff <blp@ovn.org> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Correct type of highlightingStephen Finucane2016-12-231-142/+148
| | | | | | | | | | | Some recent changes marked code as Powershell when in fact it was DOS or bash shell. This incorrect highlighting actually breaks the local build (where warnings are treated as errors) as pygments is unable to lex all the code as PowerShell. Fix these types. Signed-off-by: Stephen Finucane <stephen@that.guru> Fixes: b8d24cc8a ("doc: Misc Windows doc formatting fixes") Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Minor formatting fixes to documentation-styleStephen Finucane2016-12-221-8/+11
| | | | | Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Recommend compressed PNG images where possibleStephen Finucane2016-12-221-3/+12
| | | | | | | | ASCII images take up less space but are significantly less readable than proper images. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Add a 'what-is-ovs' documentStephen Finucane2016-12-225-0/+47
| | | | | | | | Add description of Open vSwitch from README, along with the overview image from openvswitch.org. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Document various language bindingsStephen Finucane2016-12-224-1/+65
| | | | | Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Misc fixes to 'bash-completion'Stephen Finucane2016-12-221-16/+11
| | | | | | | Fix some minor formatting issues with this document. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Add info on building documentationStephen Finucane2016-12-225-3/+108
| | | | | | | | | | | I know how to do this, but does anyone else? Let's make it obvious and ease the cognitive load on the great folks writing docs. Links to the various packaging guides, previously missing, are included on the main page. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* Update netbsd install docHui Kang2016-12-211-2/+3
| | | | | | | | - test ovs on netbsd 7.0.2 - use gmake to compile and install Signed-off-by: Hui Kang <hkang.sunysb@gmail.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
* Documentation: fix some typosLance Richardson2016-12-212-3/+3
| | | | | | | | s/deamon/daemon/ s/dependant/dependent/ Signed-off-by: Lance Richardson <lrichard@redhat.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Document Patchwork instanceStephen Finucane2016-12-214-0/+64
| | | | | | | I know more than a little bit about this :) Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Move testing to testing sectionStephen Finucane2016-12-212-348/+359
| | | | | | | | This makes more sense here, seeing as it's not exactly installation related. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Split dpdk, dpdk-advanced into multiple docsStephen Finucane2016-12-2112-1256/+1370
| | | | | | | | | | | | Combined, the dpdk and dpdk-advanced installation documents provide a lot of useful information, but most of this information is unrelated to installation. Rework these documents, completely breaking up the dpdk-advanced document into multiple smaller documents in other sections and moving non-install aspects of the dpdk document into these sections. This aims to tie the DPDK docs into the documentation structure. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Add DPDK to userspace tunneling guideStephen Finucane2016-12-214-178/+249
| | | | | | | Instructions were provided in the userspace tunneling cookbook. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Add port tunneling cookbook from websiteStephen Finucane2016-12-214-0/+168
| | | | | Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Add sFlow cookbook from websiteStephen Finucane2016-12-214-0/+174
| | | | | | | This is mostly copied verbatim. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Add QoS cookbook from websiteStephen Finucane2016-12-214-0/+160
| | | | | | | This is mostly copied verbatim. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Add vlan cookbook from websiteStephen Finucane2016-12-214-0/+145
| | | | | | | This is mostly copied verbatim. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Misc fixes to 'documentation-style'Stephen Finucane2016-12-211-9/+9
| | | | | | | | The table headers are unnecessary and make the doc harder to read, while the headers guide was not displaying very well. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Add some useful tools for doc editingStephen Finucane2016-12-211-3/+26
| | | | | | | This has come up on the mailing list. Let's document it! Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Prefer use of 'code-block' directiveStephen Finucane2016-12-211-1/+2
| | | | | | | | | The '::' element previously preferred is shorter, but does not allow for non-Python syntax highlighting. New documentation should make use of syntax highlighting wherever possible. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Misc Windows doc formatting fixesStephen Finucane2016-12-211-202/+294
| | | | | | | | | | | | | | | There are a couple of minor issues with this document: - Some commands intended to be run in the MinGW shell are prefixed with '>', suggesting they are in fact PowerShell commands - PowerShell syntax highlighting is not enabled - Indentation is off for a couple of blocks Resolve all of these through use of the 'code-block' element and a lot of random fixes. Signed-off-by: Stephen Finucane <stephen@that.guru> Signed-off-by: Ben Pfaff <blp@ovn.org>
* doc: Resolve issues with Windows guideStephen Finucane2016-12-211-54/+62
| | | | | | | | | | The formatting of this file was broken in a recent commit. Resolve this issue. Signed-off-by: Stephen Finucane <stephen@that.guru> Fixes: a0c03adff6c2 ("Windows: document multiple NIC support setup") Cc: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
* Windows: document multiple NIC support setupAlin Serdean2016-12-201-38/+104
| | | | | | | | | | | | | This patch updates the documentation on how to set up OVS with multiple NICs. Also update the documentation to show users how new internal ports are created Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com> Acked-by: Paul Boca <pboca@cloudbasesolutions.com> Acked-by: Sairam Venugopal <vsairam@vmware.com> Signed-off-by: Gurucharan Shetty <guru@ovn.org>
* docs: Document nc dependency for kernel tests.Joe Stringer2016-12-201-0/+2
| | | | | Signed-off-by: Joe Stringer <joe@ovn.org> Acked-by: Yi-Hung Wei <yihung.wei@gmail.com>