[PATCH] PerfRepoMapping: log warning when duplicate hash is parsed
in mapping file
by Jan Tluka
This will help to identify ambiguous mapping files. One hash should map to
one report. LNST would use the last hash from duplicates found in such
mapping file, so it's silently masking this issue.
Signed-off-by: Jan Tluka <jtluka(a)redhat.com>
---
lnst/Controller/PerfRepoMapping.py | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/lnst/Controller/PerfRepoMapping.py b/lnst/Controller/PerfRepoMapping.py
index 2cec2d8..3a6cee7 100644
--- a/lnst/Controller/PerfRepoMapping.py
+++ b/lnst/Controller/PerfRepoMapping.py
@@ -42,7 +42,12 @@ class PerfRepoMapping(object):
for line in lines:
match = line_re.match(line)
if match is not None and len(match.groups()) == 2:
- res_dict[match.group(1)] = match.group(2)
+ h = match.group(1)
+ if h in res_dict:
+ logging.warn("Duplicate entry found for hash: %s\n"
+ "\t %s = %s (previous)\n"
+ "\t %s (new)" % (h, h, res_dict[h], line))
+ res_dict[h] = match.group(2)
else:
logging.warn("Skipping mapping line, invalid format:\n%s" %line)
self._mapping = res_dict
--
2.7.5
6 years, 8 months
[PATCH] recipes: ovs_offload: Verify tc rule exists in ingress qdisc
by Roi Dayan
The ovs offload merge add rules to the ingress qdisc.
Signed-off-by: Roi Dayan <roid(a)mellanox.com>
---
recipes/ovs_offload/Testlib.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/recipes/ovs_offload/Testlib.py b/recipes/ovs_offload/Testlib.py
index d407319..4b0ac11 100644
--- a/recipes/ovs_offload/Testlib.py
+++ b/recipes/ovs_offload/Testlib.py
@@ -38,7 +38,7 @@ class Testlib:
dev = nic
# tc output
- cmd = host.run("tc -s filter show dev %s parent ffff:" % dev)
+ cmd = host.run("tc -s filter show dev %s ingress" % dev)
out = cmd.out().strip()
if not out:
--
1.7.1
6 years, 8 months
[PATCH] recipes/tunnels: add VXLAN/Geneve tests
by Jiri Prochazka
This patch adds new test for testing VXLAN or Geneve tunnels. The test
scenario consists of two baremetal hosts, each with one NIC. On both
hosts, there is an OVS bridge, where number of internal devices are
created along with the same number of VXLAN/Geneve interfaces. The
number is set in the task in TUNNEL_COUNT variable. This variable is set
to 16 by default. Netperf is run in parallel over each tunnel and over each
tunnel number of STREAM are run in parallel in order to maximize link
utilization. This number is specified with nperf_num_parallel alias and is set
to 4 by default.
The result throughputs are then summarized and displayed with Custom module.
This is temporary solution before we implement more complex parallel netperf in
LNST test module.
Signed-off-by: Jiri Prochazka <jprochaz(a)redhat.com>
---
recipes/tunnels/ovs_geneve.xml | 727 +++++++++++++++++++++++++++++++++++++++++
recipes/tunnels/ovs_tunnels.py | 170 ++++++++++
recipes/tunnels/ovs_vxlan.xml | 727 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 1624 insertions(+)
create mode 100644 recipes/tunnels/ovs_geneve.xml
create mode 100644 recipes/tunnels/ovs_tunnels.py
create mode 100644 recipes/tunnels/ovs_vxlan.xml
diff --git a/recipes/tunnels/ovs_geneve.xml b/recipes/tunnels/ovs_geneve.xml
new file mode 100644
index 0000000..d3ada78
--- /dev/null
+++ b/recipes/tunnels/ovs_geneve.xml
@@ -0,0 +1,727 @@
+<lnstrecipe>
+ <define>
+ <alias name="ipv" value="both" />
+ <alias name="mtu" value="1450" />
+ <alias name="netperf_duration" value="60" />
+ <alias name="nperf_reserve" value="20" />
+ <alias name="nperf_confidence" value="99,5" />
+ <alias name="nperf_max_runs" value="5"/>
+ <alias name="nperf_num_parallel" value="4"/>
+ <alias name="nperf_debug" value="0"/>
+ <alias name="nperf_max_dev" value="20%"/>
+ <alias name="nperf_protocols" value="tcp udp"/>
+ <alias name="mapping_file" value="novirt_ovs_geneve.mapping" />
+ <alias name="net" value="192.168.2"/>
+ <alias name="geneve_net" value="192.168.111"/>
+ <alias name="geneve_net6" value="fc00:0:0:0"/>
+ <alias name="driver" value=""/>
+ </define>
+ <network>
+ <host id="test_host1">
+ <interfaces>
+ <eth id="if1" label="n1">
+ <params>
+ <param name="driver" value="{$driver}"/>
+ </params>
+ <addresses>
+ <address value="{$net}.1/24"/>
+ <address value="{$net}.2/24"/>
+ <address value="{$net}.3/24"/>
+ <address value="{$net}.4/24"/>
+ <address value="{$net}.5/24"/>
+ <address value="{$net}.6/24"/>
+ <address value="{$net}.7/24"/>
+ <address value="{$net}.8/24"/>
+ <address value="{$net}.9/24"/>
+ <address value="{$net}.10/24"/>
+ <address value="{$net}.11/24"/>
+ <address value="{$net}.12/24"/>
+ <address value="{$net}.13/24"/>
+ <address value="{$net}.14/24"/>
+ <address value="{$net}.15/24"/>
+ <address value="{$net}.16/24"/>
+ </addresses>
+ </eth>
+ <ovs_bridge id="ovs1">
+ <internal id="int0">
+ <addresses>
+ <address value="{$geneve_net}.1/24"/>
+ <address value="{$geneve_net6}::1/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="5"/>
+ <option name="name" value="int0"/>
+ </options>
+ </internal>
+ <internal id="int1">
+ <addresses>
+ <address value="{$geneve_net}.2/24"/>
+ <address value="{$geneve_net6}::2/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="6"/>
+ <option name="name" value="int1"/>
+ </options>
+ </internal>
+ <internal id="int2">
+ <addresses>
+ <address value="{$geneve_net}.3/24"/>
+ <address value="{$geneve_net6}::3/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="7"/>
+ <option name="name" value="int2"/>
+ </options>
+ </internal>
+ <internal id="int3">
+ <addresses>
+ <address value="{$geneve_net}.4/24"/>
+ <address value="{$geneve_net6}::4/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="8"/>
+ <option name="name" value="int3"/>
+ </options>
+ </internal>
+ <internal id="int4">
+ <addresses>
+ <address value="{$geneve_net}.5/24"/>
+ <address value="{$geneve_net6}::5/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="9"/>
+ <option name="name" value="int4"/>
+ </options>
+ </internal>
+ <internal id="int5">
+ <addresses>
+ <address value="{$geneve_net}.6/24"/>
+ <address value="{$geneve_net6}::6/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="10"/>
+ <option name="name" value="int5"/>
+ </options>
+ </internal>
+ <internal id="int6">
+ <addresses>
+ <address value="{$geneve_net}.7/24"/>
+ <address value="{$geneve_net6}::7/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="11"/>
+ <option name="name" value="int6"/>
+ </options>
+ </internal>
+ <internal id="int7">
+ <addresses>
+ <address value="{$geneve_net}.8/24"/>
+ <address value="{$geneve_net6}::8/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="12"/>
+ <option name="name" value="int7"/>
+ </options>
+ </internal>
+ <internal id="int8">
+ <addresses>
+ <address value="{$geneve_net}.9/24"/>
+ <address value="{$geneve_net6}::9/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="13"/>
+ <option name="name" value="int8"/>
+ </options>
+ </internal>
+ <internal id="int9">
+ <addresses>
+ <address value="{$geneve_net}.10/24"/>
+ <address value="{$geneve_net6}::10/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="14"/>
+ <option name="name" value="int9"/>
+ </options>
+ </internal>
+ <internal id="int10">
+ <addresses>
+ <address value="{$geneve_net}.11/24"/>
+ <address value="{$geneve_net6}::11/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="15"/>
+ <option name="name" value="int10"/>
+ </options>
+ </internal>
+ <internal id="int11">
+ <addresses>
+ <address value="{$geneve_net}.12/24"/>
+ <address value="{$geneve_net6}::12/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="16"/>
+ <option name="name" value="int11"/>
+ </options>
+ </internal>
+ <internal id="int12">
+ <addresses>
+ <address value="{$geneve_net}.13/24"/>
+ <address value="{$geneve_net6}::13/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="17"/>
+ <option name="name" value="int12"/>
+ </options>
+ </internal>
+ <internal id="int13">
+ <addresses>
+ <address value="{$geneve_net}.14/24"/>
+ <address value="{$geneve_net6}::14/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="18"/>
+ <option name="name" value="int13"/>
+ </options>
+ </internal>
+ <internal id="int14">
+ <addresses>
+ <address value="{$geneve_net}.15/24"/>
+ <address value="{$geneve_net6}::15/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="19"/>
+ <option name="name" value="int14"/>
+ </options>
+ </internal>
+ <internal id="int15">
+ <addresses>
+ <address value="{$geneve_net}.16/24"/>
+ <address value="{$geneve_net6}::16/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="20"/>
+ <option name="name" value="int15"/>
+ </options>
+ </internal>
+ <tunnel id="geneve1" type="geneve">
+ <options>
+ <option name="name" value="geneve1"/>
+ <option name="option:remote_ip" value="{$net}.20"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="30"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve2" type="geneve">
+ <options>
+ <option name="name" value="geneve2"/>
+ <option name="option:remote_ip" value="{$net}.21"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="31"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve3" type="geneve">
+ <options>
+ <option name="name" value="geneve3"/>
+ <option name="option:remote_ip" value="{$net}.22"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="32"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve4" type="geneve">
+ <options>
+ <option name="name" value="geneve4"/>
+ <option name="option:remote_ip" value="{$net}.23"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="33"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve5" type="geneve">
+ <options>
+ <option name="name" value="geneve5"/>
+ <option name="option:remote_ip" value="{$net}.24"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="34"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve6" type="geneve">
+ <options>
+ <option name="name" value="geneve6"/>
+ <option name="option:remote_ip" value="{$net}.25"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="35"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve7" type="geneve">
+ <options>
+ <option name="name" value="geneve7"/>
+ <option name="option:remote_ip" value="{$net}.26"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="36"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve8" type="geneve">
+ <options>
+ <option name="name" value="geneve8"/>
+ <option name="option:remote_ip" value="{$net}.27"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="37"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve9" type="geneve">
+ <options>
+ <option name="name" value="geneve9"/>
+ <option name="option:remote_ip" value="{$net}.28"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="38"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve10" type="geneve">
+ <options>
+ <option name="name" value="geneve10"/>
+ <option name="option:remote_ip" value="{$net}.29"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="39"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve11" type="geneve">
+ <options>
+ <option name="name" value="geneve11"/>
+ <option name="option:remote_ip" value="{$net}.30"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="40"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve12" type="geneve">
+ <options>
+ <option name="name" value="geneve12"/>
+ <option name="option:remote_ip" value="{$net}.31"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="41"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve13" type="geneve">
+ <options>
+ <option name="name" value="geneve13"/>
+ <option name="option:remote_ip" value="{$net}.32"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="42"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve14" type="geneve">
+ <options>
+ <option name="name" value="geneve14"/>
+ <option name="option:remote_ip" value="{$net}.33"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="43"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve15" type="geneve">
+ <options>
+ <option name="name" value="geneve15"/>
+ <option name="option:remote_ip" value="{$net}.34"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="44"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve16" type="geneve">
+ <options>
+ <option name="name" value="geneve16"/>
+ <option name="option:remote_ip" value="{$net}.35"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="45"/>
+ </options>
+ </tunnel>
+ <flow_entries>
+ <entry>table=0,in_port=5,actions=set_field:100->tun_id,output:30</entry>
+ <entry>table=0,in_port=6,actions=set_field:100->tun_id,output:31</entry>
+ <entry>table=0,in_port=7,actions=set_field:100->tun_id,output:32</entry>
+ <entry>table=0,in_port=8,actions=set_field:100->tun_id,output:33</entry>
+ <entry>table=0,in_port=9,actions=set_field:100->tun_id,output:34</entry>
+ <entry>table=0,in_port=10,actions=set_field:100->tun_id,output:35</entry>
+ <entry>table=0,in_port=11,actions=set_field:100->tun_id,output:36</entry>
+ <entry>table=0,in_port=12,actions=set_field:100->tun_id,output:37</entry>
+ <entry>table=0,in_port=13,actions=set_field:100->tun_id,output:38</entry>
+ <entry>table=0,in_port=14,actions=set_field:100->tun_id,output:39</entry>
+ <entry>table=0,in_port=15,actions=set_field:100->tun_id,output:40</entry>
+ <entry>table=0,in_port=16,actions=set_field:100->tun_id,output:41</entry>
+ <entry>table=0,in_port=17,actions=set_field:100->tun_id,output:42</entry>
+ <entry>table=0,in_port=18,actions=set_field:100->tun_id,output:43</entry>
+ <entry>table=0,in_port=19,actions=set_field:100->tun_id,output:44</entry>
+ <entry>table=0,in_port=20,actions=set_field:100->tun_id,output:45</entry>
+ <entry>table=0,in_port=30,tun_id=100,actions=output:5</entry>
+ <entry>table=0,in_port=31,tun_id=100,actions=output:6</entry>
+ <entry>table=0,in_port=32,tun_id=100,actions=output:7</entry>
+ <entry>table=0,in_port=33,tun_id=100,actions=output:8</entry>
+ <entry>table=0,in_port=34,tun_id=100,actions=output:9</entry>
+ <entry>table=0,in_port=35,tun_id=100,actions=output:10</entry>
+ <entry>table=0,in_port=36,tun_id=100,actions=output:11</entry>
+ <entry>table=0,in_port=37,tun_id=100,actions=output:12</entry>
+ <entry>table=0,in_port=38,tun_id=100,actions=output:13</entry>
+ <entry>table=0,in_port=39,tun_id=100,actions=output:14</entry>
+ <entry>table=0,in_port=40,tun_id=100,actions=output:15</entry>
+ <entry>table=0,in_port=41,tun_id=100,actions=output:16</entry>
+ <entry>table=0,in_port=42,tun_id=100,actions=output:17</entry>
+ <entry>table=0,in_port=43,tun_id=100,actions=output:18</entry>
+ <entry>table=0,in_port=44,tun_id=100,actions=output:19</entry>
+ <entry>table=0,in_port=45,tun_id=100,actions=output:20</entry>
+ <entry>table=0,priority=100,actions=drop</entry>
+ </flow_entries>
+ </ovs_bridge>
+ </interfaces>
+ </host>
+ <host id="test_host2">
+ <interfaces>
+ <eth id="if1" label="n1">
+ <params>
+ <param name="driver" value="{$driver}"/>
+ </params>
+ <addresses>
+ <address value="{$net}.20/24"/>
+ <address value="{$net}.21/24"/>
+ <address value="{$net}.22/24"/>
+ <address value="{$net}.23/24"/>
+ <address value="{$net}.24/24"/>
+ <address value="{$net}.25/24"/>
+ <address value="{$net}.26/24"/>
+ <address value="{$net}.27/24"/>
+ <address value="{$net}.28/24"/>
+ <address value="{$net}.29/24"/>
+ <address value="{$net}.30/24"/>
+ <address value="{$net}.31/24"/>
+ <address value="{$net}.32/24"/>
+ <address value="{$net}.33/24"/>
+ <address value="{$net}.34/24"/>
+ <address value="{$net}.35/24"/>
+ </addresses>
+ </eth>
+ <ovs_bridge id="ovs2">
+ <internal id="int0">
+ <options>
+ <option name="ofport_request" value="5"/>
+ <option name="name" value="int0"/>
+ </options>
+ <addresses>
+ <address value="{$geneve_net}.20/24"/>
+ <address value="{$geneve_net6}::20/24"/>
+ </addresses>
+ </internal>
+ <internal id="int1">
+ <addresses>
+ <address value="{$geneve_net}.21/24"/>
+ <address value="{$geneve_net6}::21/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="6"/>
+ <option name="name" value="int1"/>
+ </options>
+ </internal>
+ <internal id="int2">
+ <addresses>
+ <address value="{$geneve_net}.22/24"/>
+ <address value="{$geneve_net6}::22/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="7"/>
+ <option name="name" value="int2"/>
+ </options>
+ </internal>
+ <internal id="int3">
+ <addresses>
+ <address value="{$geneve_net}.23/24"/>
+ <address value="{$geneve_net6}::23/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="8"/>
+ <option name="name" value="int3"/>
+ </options>
+ </internal>
+ <internal id="int4">
+ <addresses>
+ <address value="{$geneve_net}.24/24"/>
+ <address value="{$geneve_net6}::24/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="9"/>
+ <option name="name" value="int4"/>
+ </options>
+ </internal>
+ <internal id="int5">
+ <addresses>
+ <address value="{$geneve_net}.25/24"/>
+ <address value="{$geneve_net6}::25/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="10"/>
+ <option name="name" value="int5"/>
+ </options>
+ </internal>
+ <internal id="int6">
+ <addresses>
+ <address value="{$geneve_net}.26/24"/>
+ <address value="{$geneve_net6}::26/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="11"/>
+ <option name="name" value="int6"/>
+ </options>
+ </internal>
+ <internal id="int7">
+ <addresses>
+ <address value="{$geneve_net}.27/24"/>
+ <address value="{$geneve_net6}::27/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="12"/>
+ <option name="name" value="int7"/>
+ </options>
+ </internal>
+ <internal id="int8">
+ <addresses>
+ <address value="{$geneve_net}.28/24"/>
+ <address value="{$geneve_net6}::28/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="13"/>
+ <option name="name" value="int8"/>
+ </options>
+ </internal>
+ <internal id="int9">
+ <addresses>
+ <address value="{$geneve_net}.29/24"/>
+ <address value="{$geneve_net6}::29/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="14"/>
+ <option name="name" value="int9"/>
+ </options>
+ </internal>
+ <internal id="int10">
+ <addresses>
+ <address value="{$geneve_net}.30/24"/>
+ <address value="{$geneve_net6}::30/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="15"/>
+ <option name="name" value="int10"/>
+ </options>
+ </internal>
+ <internal id="int11">
+ <addresses>
+ <address value="{$geneve_net}.31/24"/>
+ <address value="{$geneve_net6}::31/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="16"/>
+ <option name="name" value="int11"/>
+ </options>
+ </internal>
+ <internal id="int12">
+ <addresses>
+ <address value="{$geneve_net}.32/24"/>
+ <address value="{$geneve_net6}::32/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="17"/>
+ <option name="name" value="int12"/>
+ </options>
+ </internal>
+ <internal id="int13">
+ <addresses>
+ <address value="{$geneve_net}.33/24"/>
+ <address value="{$geneve_net6}::33/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="18"/>
+ <option name="name" value="int13"/>
+ </options>
+ </internal>
+ <internal id="int14">
+ <addresses>
+ <address value="{$geneve_net}.34/24"/>
+ <address value="{$geneve_net6}::34/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="19"/>
+ <option name="name" value="int14"/>
+ </options>
+ </internal>
+ <internal id="int15">
+ <addresses>
+ <address value="{$geneve_net}.35/24"/>
+ <address value="{$geneve_net6}::35/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="20"/>
+ <option name="name" value="int15"/>
+ </options>
+ </internal>
+ <tunnel id="geneve1" type="geneve">
+ <options>
+ <option name="name" value="geneve1"/>
+ <option name="option:remote_ip" value="{$net}.1"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="30"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve2" type="geneve">
+ <options>
+ <option name="name" value="geneve2"/>
+ <option name="option:remote_ip" value="{$net}.2"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="31"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve3" type="geneve">
+ <options>
+ <option name="name" value="geneve3"/>
+ <option name="option:remote_ip" value="{$net}.3"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="32"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve4" type="geneve">
+ <options>
+ <option name="name" value="geneve4"/>
+ <option name="option:remote_ip" value="{$net}.4"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="33"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve5" type="geneve">
+ <options>
+ <option name="name" value="geneve5"/>
+ <option name="option:remote_ip" value="{$net}.5"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="34"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve6" type="geneve">
+ <options>
+ <option name="name" value="geneve6"/>
+ <option name="option:remote_ip" value="{$net}.6"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="35"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve7" type="geneve">
+ <options>
+ <option name="name" value="geneve7"/>
+ <option name="option:remote_ip" value="{$net}.7"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="36"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve8" type="geneve">
+ <options>
+ <option name="name" value="geneve8"/>
+ <option name="option:remote_ip" value="{$net}.8"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="37"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve9" type="geneve">
+ <options>
+ <option name="name" value="geneve9"/>
+ <option name="option:remote_ip" value="{$net}.9"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="38"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve10" type="geneve">
+ <options>
+ <option name="name" value="geneve10"/>
+ <option name="option:remote_ip" value="{$net}.10"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="39"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve11" type="geneve">
+ <options>
+ <option name="name" value="geneve11"/>
+ <option name="option:remote_ip" value="{$net}.11"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="40"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve12" type="geneve">
+ <options>
+ <option name="name" value="geneve12"/>
+ <option name="option:remote_ip" value="{$net}.12"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="41"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve13" type="geneve">
+ <options>
+ <option name="name" value="geneve13"/>
+ <option name="option:remote_ip" value="{$net}.13"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="42"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve14" type="geneve">
+ <options>
+ <option name="name" value="geneve14"/>
+ <option name="option:remote_ip" value="{$net}.14"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="43"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve15" type="geneve">
+ <options>
+ <option name="name" value="geneve15"/>
+ <option name="option:remote_ip" value="{$net}.15"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="44"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve16" type="geneve">
+ <options>
+ <option name="name" value="geneve16"/>
+ <option name="option:remote_ip" value="{$net}.16"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="45"/>
+ </options>
+ </tunnel>
+ <flow_entries>
+ <entry>table=0,in_port=5,actions=set_field:100->tun_id,output:30</entry>
+ <entry>table=0,in_port=6,actions=set_field:100->tun_id,output:31</entry>
+ <entry>table=0,in_port=7,actions=set_field:100->tun_id,output:32</entry>
+ <entry>table=0,in_port=8,actions=set_field:100->tun_id,output:33</entry>
+ <entry>table=0,in_port=9,actions=set_field:100->tun_id,output:34</entry>
+ <entry>table=0,in_port=10,actions=set_field:100->tun_id,output:35</entry>
+ <entry>table=0,in_port=11,actions=set_field:100->tun_id,output:36</entry>
+ <entry>table=0,in_port=12,actions=set_field:100->tun_id,output:37</entry>
+ <entry>table=0,in_port=13,actions=set_field:100->tun_id,output:38</entry>
+ <entry>table=0,in_port=14,actions=set_field:100->tun_id,output:39</entry>
+ <entry>table=0,in_port=15,actions=set_field:100->tun_id,output:40</entry>
+ <entry>table=0,in_port=16,actions=set_field:100->tun_id,output:41</entry>
+ <entry>table=0,in_port=17,actions=set_field:100->tun_id,output:42</entry>
+ <entry>table=0,in_port=18,actions=set_field:100->tun_id,output:43</entry>
+ <entry>table=0,in_port=19,actions=set_field:100->tun_id,output:44</entry>
+ <entry>table=0,in_port=20,actions=set_field:100->tun_id,output:45</entry>
+ <entry>table=0,in_port=30,tun_id=100,actions=output:5</entry>
+ <entry>table=0,in_port=31,tun_id=100,actions=output:6</entry>
+ <entry>table=0,in_port=32,tun_id=100,actions=output:7</entry>
+ <entry>table=0,in_port=33,tun_id=100,actions=output:8</entry>
+ <entry>table=0,in_port=34,tun_id=100,actions=output:9</entry>
+ <entry>table=0,in_port=35,tun_id=100,actions=output:10</entry>
+ <entry>table=0,in_port=36,tun_id=100,actions=output:11</entry>
+ <entry>table=0,in_port=37,tun_id=100,actions=output:12</entry>
+ <entry>table=0,in_port=38,tun_id=100,actions=output:13</entry>
+ <entry>table=0,in_port=39,tun_id=100,actions=output:14</entry>
+ <entry>table=0,in_port=40,tun_id=100,actions=output:15</entry>
+ <entry>table=0,in_port=41,tun_id=100,actions=output:16</entry>
+ <entry>table=0,in_port=42,tun_id=100,actions=output:17</entry>
+ <entry>table=0,in_port=43,tun_id=100,actions=output:18</entry>
+ <entry>table=0,in_port=44,tun_id=100,actions=output:19</entry>
+ <entry>table=0,in_port=45,tun_id=100,actions=output:20</entry>
+ <entry>table=0,priority=100,actions=drop</entry>
+ </flow_entries>
+ </ovs_bridge>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="ovs_tunnels.py"/>
+</lnstrecipe>
diff --git a/recipes/tunnels/ovs_tunnels.py b/recipes/tunnels/ovs_tunnels.py
new file mode 100644
index 0000000..2075d84
--- /dev/null
+++ b/recipes/tunnels/ovs_tunnels.py
@@ -0,0 +1,170 @@
+from lnst.Controller.Task import ctl
+
+from lnst.RecipeCommon.ModuleWrap import netperf
+from lnst.RecipeCommon.IRQ import pin_dev_irqs
+
+def run_netperf(netperf_servers, netperf_clients, testname):
+ netperf_cli_procs = []
+ netperf_srv_procs = []
+
+ timeout = (netperf_duration + nperf_reserve) * nperf_max_runs
+
+ for i in range(0, TUNNEL_COUNT):
+ netperf_clients[i].update_options({"testname" : testname})
+
+ netperf_srv_procs.append(h2.run(netperf_servers[i], bg=True, timeout=timeout))
+ netperf_cli_procs.append(h1.run(netperf_clients[i], bg=True, timeout=timeout))
+
+ for i in range(0, TUNNEL_COUNT):
+ netperf_cli_procs[i].wait()
+ netperf_srv_procs[i].intr()
+
+ sum = 0
+
+ for i in range(0, TUNNEL_COUNT):
+ sum += netperf_cli_procs[i].get_result()['res_data']['rate']
+
+ res = ctl.get_module("Custom",
+ options={
+ "rate" : sum,
+ "unit" : "bps",
+ "testname" : testname
+ })
+
+ return res
+
+# ------
+# SETUP
+# ------
+
+# test hosts
+h1 = ctl.get_host("test_host1")
+h2 = ctl.get_host("test_host2")
+
+for h in [h1, h2]:
+ h.sync_resources(modules=["Netperf", "Custom"])
+
+TUNNEL_COUNT = 16
+
+# ------
+# TESTS
+# ------
+
+ipv = ctl.get_alias("ipv")
+mtu = ctl.get_alias("mtu")
+netperf_duration = int(ctl.get_alias("netperf_duration"))
+nperf_reserve = int(ctl.get_alias("nperf_reserve"))
+nperf_confidence = ctl.get_alias("nperf_confidence")
+nperf_max_runs = int(ctl.get_alias("nperf_max_runs"))
+nperf_cpupin = ctl.get_alias("nperf_cpupin")
+nperf_cpu_util = ctl.get_alias("nperf_cpu_util")
+nperf_num_parallel = int(ctl.get_alias("nperf_num_parallel"))
+nperf_debug = ctl.get_alias("nperf_debug")
+nperf_max_dev = ctl.get_alias("nperf_max_dev")
+nperf_msg_size = ctl.get_alias("nperf_msg_size")
+nperf_protocols = ctl.get_alias("nperf_protocols")
+
+devices = []
+
+h1_nic = h1.get_interface("if1")
+h2_nic = h2.get_interface("if1")
+
+for i in range(0, TUNNEL_COUNT):
+ d1 = h1.get_device("int" + str(i))
+ d2 = h2.get_device("int" + str(i))
+ devices.append((d1, d2))
+
+for h1_dev, h2_dev in devices:
+ h1_dev.set_mtu(mtu)
+ h2_dev.set_mtu(mtu)
+
+nperf_opts = ""
+if nperf_cpupin:
+ h1.run("service irqbalance stop")
+ h2.run("service irqbalance stop")
+
+ # this will pin devices irqs to cpu #0
+ for m, d in [(h1, h1_nic), (h2, h2_nic)]:
+ pin_dev_irqs(m, d, 0)
+
+if nperf_cpupin and nperf_num_parallel == 1:
+ nperf_opts = " -T%s,%s" % (nperf_cpupin, nperf_cpupin)
+
+
+ctl.wait(15)
+
+netperf_clients = []
+netperf_servers = []
+netperf_clients6 = []
+netperf_servers6 = []
+
+
+for h1_dev, h2_dev in devices:
+ netperf_clients.append(ctl.get_module("Netperf",
+ options={
+ "role" : "client",
+ "netperf_server": h2_dev.get_ip(0),
+ "bind": h1_dev.get_ip(0),
+ "duration" : netperf_duration,
+ "testname" : "TCP_STREAM",
+ "confidence" : nperf_confidence,
+ "cpu_util" : nperf_cpu_util,
+ "runs": nperf_max_runs,
+ "debug" : nperf_debug,
+ "num_parallel" : nperf_num_parallel,
+ "max_deviation" : nperf_max_dev}))
+
+ netperf_clients6.append(ctl.get_module("Netperf",
+ options={
+ "role" : "client",
+ "netperf_server": h2_dev.get_ip(1),
+ "bind": h1_dev.get_ip(1),
+ "duration" : netperf_duration,
+ "testname" : "TCP_STREAM",
+ "confidence" : nperf_confidence,
+ "cpu_util" : nperf_cpu_util,
+ "runs": nperf_max_runs,
+ "debug" : nperf_debug,
+ "num_parallel" : nperf_num_parallel,
+ "max_deviation" : nperf_max_dev}))
+
+ netperf_servers.append(ctl.get_module("Netperf",
+ options={
+ "role" : "server",
+ "bind": h2_dev.get_ip(0)}))
+
+ netperf_servers6.append(ctl.get_module("Netperf",
+ options={
+ "role" : "server",
+ "bind": h2_dev.get_ip(1)}))
+
+
+for action in ["on", "off"]:
+ h1.run("ethtool -K %s tx-udp_tnl-segmentation %s" % (h1_nic.get_devname(), action))
+ h2.run("ethtool -K %s tx-udp_tnl-segmentation %s" % (h2_nic.get_devname(), action))
+
+ #netperfs
+ ctl.wait(5)
+
+ if ipv in ["ipv4", "both"]:
+ if nperf_protocols.find("tcp") > -1:
+ testname = "TCP_STREAM"
+ res = run_netperf(netperf_servers, netperf_clients, testname)
+ h1.run(res)
+ if nperf_protocols.find("udp") > -1:
+ testname = "UDP_STREAM"
+ res = run_netperf(netperf_servers, netperf_clients, testname)
+ h1.run(res)
+ if ipv in ["ipv6", "both"]:
+ if nperf_protocols.find("tcp") > -1:
+ testname = "TCP_STREAM"
+ res = run_netperf(netperf_servers6, netperf_clients6, testname)
+ h1.run(res)
+ if nperf_protocols.find("udp") > -1:
+ testname = "UDP_STREAM"
+ res = run_netperf(netperf_servers6, netperf_clients6, testname)
+ h1.run(res)
+
+if nperf_cpupin:
+ h1.run("service irqbalance start")
+ h2.run("service irqbalance start")
diff --git a/recipes/tunnels/ovs_vxlan.xml b/recipes/tunnels/ovs_vxlan.xml
new file mode 100644
index 0000000..773e464
--- /dev/null
+++ b/recipes/tunnels/ovs_vxlan.xml
@@ -0,0 +1,727 @@
+<lnstrecipe>
+ <define>
+ <alias name="ipv" value="both" />
+ <alias name="mtu" value="1450" />
+ <alias name="netperf_duration" value="60" />
+ <alias name="nperf_reserve" value="20" />
+ <alias name="nperf_confidence" value="99,5" />
+ <alias name="nperf_max_runs" value="5"/>
+ <alias name="nperf_num_parallel" value="4"/>
+ <alias name="nperf_debug" value="0"/>
+ <alias name="nperf_max_dev" value="20%"/>
+ <alias name="nperf_protocols" value="tcp udp"/>
+ <alias name="mapping_file" value="novirt_ovs_vxlan.mapping" />
+ <alias name="net" value="192.168.2"/>
+ <alias name="vxlan_net" value="192.168.111"/>
+ <alias name="vxlan_net6" value="fc00:0:0:0"/>
+ <alias name="driver" value=""/>
+ </define>
+ <network>
+ <host id="test_host1">
+ <interfaces>
+ <eth id="if1" label="n1">
+ <params>
+ <param name="driver" value="{$driver}"/>
+ </params>
+ <addresses>
+ <address value="{$net}.1/24"/>
+ <address value="{$net}.2/24"/>
+ <address value="{$net}.3/24"/>
+ <address value="{$net}.4/24"/>
+ <address value="{$net}.5/24"/>
+ <address value="{$net}.6/24"/>
+ <address value="{$net}.7/24"/>
+ <address value="{$net}.8/24"/>
+ <address value="{$net}.9/24"/>
+ <address value="{$net}.10/24"/>
+ <address value="{$net}.11/24"/>
+ <address value="{$net}.12/24"/>
+ <address value="{$net}.13/24"/>
+ <address value="{$net}.14/24"/>
+ <address value="{$net}.15/24"/>
+ <address value="{$net}.16/24"/>
+ </addresses>
+ </eth>
+ <ovs_bridge id="ovs1">
+ <internal id="int0">
+ <addresses>
+ <address value="{$vxlan_net}.1/24"/>
+ <address value="{$vxlan_net6}::1/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="5"/>
+ <option name="name" value="int0"/>
+ </options>
+ </internal>
+ <internal id="int1">
+ <addresses>
+ <address value="{$vxlan_net}.2/24"/>
+ <address value="{$vxlan_net6}::2/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="6"/>
+ <option name="name" value="int1"/>
+ </options>
+ </internal>
+ <internal id="int2">
+ <addresses>
+ <address value="{$vxlan_net}.3/24"/>
+ <address value="{$vxlan_net6}::3/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="7"/>
+ <option name="name" value="int2"/>
+ </options>
+ </internal>
+ <internal id="int3">
+ <addresses>
+ <address value="{$vxlan_net}.4/24"/>
+ <address value="{$vxlan_net6}::4/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="8"/>
+ <option name="name" value="int3"/>
+ </options>
+ </internal>
+ <internal id="int4">
+ <addresses>
+ <address value="{$vxlan_net}.5/24"/>
+ <address value="{$vxlan_net6}::5/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="9"/>
+ <option name="name" value="int4"/>
+ </options>
+ </internal>
+ <internal id="int5">
+ <addresses>
+ <address value="{$vxlan_net}.6/24"/>
+ <address value="{$vxlan_net6}::6/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="10"/>
+ <option name="name" value="int5"/>
+ </options>
+ </internal>
+ <internal id="int6">
+ <addresses>
+ <address value="{$vxlan_net}.7/24"/>
+ <address value="{$vxlan_net6}::7/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="11"/>
+ <option name="name" value="int6"/>
+ </options>
+ </internal>
+ <internal id="int7">
+ <addresses>
+ <address value="{$vxlan_net}.8/24"/>
+ <address value="{$vxlan_net6}::8/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="12"/>
+ <option name="name" value="int7"/>
+ </options>
+ </internal>
+ <internal id="int8">
+ <addresses>
+ <address value="{$vxlan_net}.9/24"/>
+ <address value="{$vxlan_net6}::9/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="13"/>
+ <option name="name" value="int8"/>
+ </options>
+ </internal>
+ <internal id="int9">
+ <addresses>
+ <address value="{$vxlan_net}.10/24"/>
+ <address value="{$vxlan_net6}::10/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="14"/>
+ <option name="name" value="int9"/>
+ </options>
+ </internal>
+ <internal id="int10">
+ <addresses>
+ <address value="{$vxlan_net}.11/24"/>
+ <address value="{$vxlan_net6}::11/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="15"/>
+ <option name="name" value="int10"/>
+ </options>
+ </internal>
+ <internal id="int11">
+ <addresses>
+ <address value="{$vxlan_net}.12/24"/>
+ <address value="{$vxlan_net6}::12/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="16"/>
+ <option name="name" value="int11"/>
+ </options>
+ </internal>
+ <internal id="int12">
+ <addresses>
+ <address value="{$vxlan_net}.13/24"/>
+ <address value="{$vxlan_net6}::13/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="17"/>
+ <option name="name" value="int12"/>
+ </options>
+ </internal>
+ <internal id="int13">
+ <addresses>
+ <address value="{$vxlan_net}.14/24"/>
+ <address value="{$vxlan_net6}::14/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="18"/>
+ <option name="name" value="int13"/>
+ </options>
+ </internal>
+ <internal id="int14">
+ <addresses>
+ <address value="{$vxlan_net}.15/24"/>
+ <address value="{$vxlan_net6}::15/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="19"/>
+ <option name="name" value="int14"/>
+ </options>
+ </internal>
+ <internal id="int15">
+ <addresses>
+ <address value="{$vxlan_net}.16/24"/>
+ <address value="{$vxlan_net6}::16/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="20"/>
+ <option name="name" value="int15"/>
+ </options>
+ </internal>
+ <tunnel id="vxlan1" type="vxlan">
+ <options>
+ <option name="name" value="vxlan1"/>
+ <option name="option:remote_ip" value="{$net}.20"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="30"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan2" type="vxlan">
+ <options>
+ <option name="name" value="vxlan2"/>
+ <option name="option:remote_ip" value="{$net}.21"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="31"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan3" type="vxlan">
+ <options>
+ <option name="name" value="vxlan3"/>
+ <option name="option:remote_ip" value="{$net}.22"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="32"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan4" type="vxlan">
+ <options>
+ <option name="name" value="vxlan4"/>
+ <option name="option:remote_ip" value="{$net}.23"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="33"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan5" type="vxlan">
+ <options>
+ <option name="name" value="vxlan5"/>
+ <option name="option:remote_ip" value="{$net}.24"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="34"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan6" type="vxlan">
+ <options>
+ <option name="name" value="vxlan6"/>
+ <option name="option:remote_ip" value="{$net}.25"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="35"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan7" type="vxlan">
+ <options>
+ <option name="name" value="vxlan7"/>
+ <option name="option:remote_ip" value="{$net}.26"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="36"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan8" type="vxlan">
+ <options>
+ <option name="name" value="vxlan8"/>
+ <option name="option:remote_ip" value="{$net}.27"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="37"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan9" type="vxlan">
+ <options>
+ <option name="name" value="vxlan9"/>
+ <option name="option:remote_ip" value="{$net}.28"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="38"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan10" type="vxlan">
+ <options>
+ <option name="name" value="vxlan10"/>
+ <option name="option:remote_ip" value="{$net}.29"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="39"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan11" type="vxlan">
+ <options>
+ <option name="name" value="vxlan11"/>
+ <option name="option:remote_ip" value="{$net}.30"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="40"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan12" type="vxlan">
+ <options>
+ <option name="name" value="vxlan12"/>
+ <option name="option:remote_ip" value="{$net}.31"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="41"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan13" type="vxlan">
+ <options>
+ <option name="name" value="vxlan13"/>
+ <option name="option:remote_ip" value="{$net}.32"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="42"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan14" type="vxlan">
+ <options>
+ <option name="name" value="vxlan14"/>
+ <option name="option:remote_ip" value="{$net}.33"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="43"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan15" type="vxlan">
+ <options>
+ <option name="name" value="vxlan15"/>
+ <option name="option:remote_ip" value="{$net}.34"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="44"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan16" type="vxlan">
+ <options>
+ <option name="name" value="vxlan16"/>
+ <option name="option:remote_ip" value="{$net}.35"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="45"/>
+ </options>
+ </tunnel>
+ <flow_entries>
+ <entry>table=0,in_port=5,actions=set_field:100->tun_id,output:30</entry>
+ <entry>table=0,in_port=6,actions=set_field:100->tun_id,output:31</entry>
+ <entry>table=0,in_port=7,actions=set_field:100->tun_id,output:32</entry>
+ <entry>table=0,in_port=8,actions=set_field:100->tun_id,output:33</entry>
+ <entry>table=0,in_port=9,actions=set_field:100->tun_id,output:34</entry>
+ <entry>table=0,in_port=10,actions=set_field:100->tun_id,output:35</entry>
+ <entry>table=0,in_port=11,actions=set_field:100->tun_id,output:36</entry>
+ <entry>table=0,in_port=12,actions=set_field:100->tun_id,output:37</entry>
+ <entry>table=0,in_port=13,actions=set_field:100->tun_id,output:38</entry>
+ <entry>table=0,in_port=14,actions=set_field:100->tun_id,output:39</entry>
+ <entry>table=0,in_port=15,actions=set_field:100->tun_id,output:40</entry>
+ <entry>table=0,in_port=16,actions=set_field:100->tun_id,output:41</entry>
+ <entry>table=0,in_port=17,actions=set_field:100->tun_id,output:42</entry>
+ <entry>table=0,in_port=18,actions=set_field:100->tun_id,output:43</entry>
+ <entry>table=0,in_port=19,actions=set_field:100->tun_id,output:44</entry>
+ <entry>table=0,in_port=20,actions=set_field:100->tun_id,output:45</entry>
+ <entry>table=0,in_port=30,tun_id=100,actions=output:5</entry>
+ <entry>table=0,in_port=31,tun_id=100,actions=output:6</entry>
+ <entry>table=0,in_port=32,tun_id=100,actions=output:7</entry>
+ <entry>table=0,in_port=33,tun_id=100,actions=output:8</entry>
+ <entry>table=0,in_port=34,tun_id=100,actions=output:9</entry>
+ <entry>table=0,in_port=35,tun_id=100,actions=output:10</entry>
+ <entry>table=0,in_port=36,tun_id=100,actions=output:11</entry>
+ <entry>table=0,in_port=37,tun_id=100,actions=output:12</entry>
+ <entry>table=0,in_port=38,tun_id=100,actions=output:13</entry>
+ <entry>table=0,in_port=39,tun_id=100,actions=output:14</entry>
+ <entry>table=0,in_port=40,tun_id=100,actions=output:15</entry>
+ <entry>table=0,in_port=41,tun_id=100,actions=output:16</entry>
+ <entry>table=0,in_port=42,tun_id=100,actions=output:17</entry>
+ <entry>table=0,in_port=43,tun_id=100,actions=output:18</entry>
+ <entry>table=0,in_port=44,tun_id=100,actions=output:19</entry>
+ <entry>table=0,in_port=45,tun_id=100,actions=output:20</entry>
+ <entry>table=0,priority=100,actions=drop</entry>
+ </flow_entries>
+ </ovs_bridge>
+ </interfaces>
+ </host>
+ <host id="test_host2">
+ <interfaces>
+ <eth id="if1" label="n1">
+ <params>
+ <param name="driver" value="{$driver}"/>
+ </params>
+ <addresses>
+ <address value="{$net}.20/24"/>
+ <address value="{$net}.21/24"/>
+ <address value="{$net}.22/24"/>
+ <address value="{$net}.23/24"/>
+ <address value="{$net}.24/24"/>
+ <address value="{$net}.25/24"/>
+ <address value="{$net}.26/24"/>
+ <address value="{$net}.27/24"/>
+ <address value="{$net}.28/24"/>
+ <address value="{$net}.29/24"/>
+ <address value="{$net}.30/24"/>
+ <address value="{$net}.31/24"/>
+ <address value="{$net}.32/24"/>
+ <address value="{$net}.33/24"/>
+ <address value="{$net}.34/24"/>
+ <address value="{$net}.35/24"/>
+ </addresses>
+ </eth>
+ <ovs_bridge id="ovs2">
+ <internal id="int0">
+ <options>
+ <option name="ofport_request" value="5"/>
+ <option name="name" value="int0"/>
+ </options>
+ <addresses>
+ <address value="{$vxlan_net}.20/24"/>
+ <address value="{$vxlan_net6}::20/24"/>
+ </addresses>
+ </internal>
+ <internal id="int1">
+ <addresses>
+ <address value="{$vxlan_net}.21/24"/>
+ <address value="{$vxlan_net6}::21/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="6"/>
+ <option name="name" value="int1"/>
+ </options>
+ </internal>
+ <internal id="int2">
+ <addresses>
+ <address value="{$vxlan_net}.22/24"/>
+ <address value="{$vxlan_net6}::22/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="7"/>
+ <option name="name" value="int2"/>
+ </options>
+ </internal>
+ <internal id="int3">
+ <addresses>
+ <address value="{$vxlan_net}.23/24"/>
+ <address value="{$vxlan_net6}::23/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="8"/>
+ <option name="name" value="int3"/>
+ </options>
+ </internal>
+ <internal id="int4">
+ <addresses>
+ <address value="{$vxlan_net}.24/24"/>
+ <address value="{$vxlan_net6}::24/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="9"/>
+ <option name="name" value="int4"/>
+ </options>
+ </internal>
+ <internal id="int5">
+ <addresses>
+ <address value="{$vxlan_net}.25/24"/>
+ <address value="{$vxlan_net6}::25/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="10"/>
+ <option name="name" value="int5"/>
+ </options>
+ </internal>
+ <internal id="int6">
+ <addresses>
+ <address value="{$vxlan_net}.26/24"/>
+ <address value="{$vxlan_net6}::26/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="11"/>
+ <option name="name" value="int6"/>
+ </options>
+ </internal>
+ <internal id="int7">
+ <addresses>
+ <address value="{$vxlan_net}.27/24"/>
+ <address value="{$vxlan_net6}::27/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="12"/>
+ <option name="name" value="int7"/>
+ </options>
+ </internal>
+ <internal id="int8">
+ <addresses>
+ <address value="{$vxlan_net}.28/24"/>
+ <address value="{$vxlan_net6}::28/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="13"/>
+ <option name="name" value="int8"/>
+ </options>
+ </internal>
+ <internal id="int9">
+ <addresses>
+ <address value="{$vxlan_net}.29/24"/>
+ <address value="{$vxlan_net6}::29/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="14"/>
+ <option name="name" value="int9"/>
+ </options>
+ </internal>
+ <internal id="int10">
+ <addresses>
+ <address value="{$vxlan_net}.30/24"/>
+ <address value="{$vxlan_net6}::30/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="15"/>
+ <option name="name" value="int10"/>
+ </options>
+ </internal>
+ <internal id="int11">
+ <addresses>
+ <address value="{$vxlan_net}.31/24"/>
+ <address value="{$vxlan_net6}::31/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="16"/>
+ <option name="name" value="int11"/>
+ </options>
+ </internal>
+ <internal id="int12">
+ <addresses>
+ <address value="{$vxlan_net}.32/24"/>
+ <address value="{$vxlan_net6}::32/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="17"/>
+ <option name="name" value="int12"/>
+ </options>
+ </internal>
+ <internal id="int13">
+ <addresses>
+ <address value="{$vxlan_net}.33/24"/>
+ <address value="{$vxlan_net6}::33/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="18"/>
+ <option name="name" value="int13"/>
+ </options>
+ </internal>
+ <internal id="int14">
+ <addresses>
+ <address value="{$vxlan_net}.34/24"/>
+ <address value="{$vxlan_net6}::34/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="19"/>
+ <option name="name" value="int14"/>
+ </options>
+ </internal>
+ <internal id="int15">
+ <addresses>
+ <address value="{$vxlan_net}.35/24"/>
+ <address value="{$vxlan_net6}::35/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="20"/>
+ <option name="name" value="int15"/>
+ </options>
+ </internal>
+ <tunnel id="vxlan1" type="vxlan">
+ <options>
+ <option name="name" value="vxlan1"/>
+ <option name="option:remote_ip" value="{$net}.1"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="30"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan2" type="vxlan">
+ <options>
+ <option name="name" value="vxlan2"/>
+ <option name="option:remote_ip" value="{$net}.2"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="31"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan3" type="vxlan">
+ <options>
+ <option name="name" value="vxlan3"/>
+ <option name="option:remote_ip" value="{$net}.3"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="32"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan4" type="vxlan">
+ <options>
+ <option name="name" value="vxlan4"/>
+ <option name="option:remote_ip" value="{$net}.4"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="33"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan5" type="vxlan">
+ <options>
+ <option name="name" value="vxlan5"/>
+ <option name="option:remote_ip" value="{$net}.5"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="34"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan6" type="vxlan">
+ <options>
+ <option name="name" value="vxlan6"/>
+ <option name="option:remote_ip" value="{$net}.6"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="35"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan7" type="vxlan">
+ <options>
+ <option name="name" value="vxlan7"/>
+ <option name="option:remote_ip" value="{$net}.7"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="36"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan8" type="vxlan">
+ <options>
+ <option name="name" value="vxlan8"/>
+ <option name="option:remote_ip" value="{$net}.8"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="37"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan9" type="vxlan">
+ <options>
+ <option name="name" value="vxlan9"/>
+ <option name="option:remote_ip" value="{$net}.9"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="38"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan10" type="vxlan">
+ <options>
+ <option name="name" value="vxlan10"/>
+ <option name="option:remote_ip" value="{$net}.10"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="39"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan11" type="vxlan">
+ <options>
+ <option name="name" value="vxlan11"/>
+ <option name="option:remote_ip" value="{$net}.11"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="40"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan12" type="vxlan">
+ <options>
+ <option name="name" value="vxlan12"/>
+ <option name="option:remote_ip" value="{$net}.12"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="41"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan13" type="vxlan">
+ <options>
+ <option name="name" value="vxlan13"/>
+ <option name="option:remote_ip" value="{$net}.13"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="42"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan14" type="vxlan">
+ <options>
+ <option name="name" value="vxlan14"/>
+ <option name="option:remote_ip" value="{$net}.14"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="43"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan15" type="vxlan">
+ <options>
+ <option name="name" value="vxlan15"/>
+ <option name="option:remote_ip" value="{$net}.15"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="44"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan16" type="vxlan">
+ <options>
+ <option name="name" value="vxlan16"/>
+ <option name="option:remote_ip" value="{$net}.16"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="45"/>
+ </options>
+ </tunnel>
+ <flow_entries>
+ <entry>table=0,in_port=5,actions=set_field:100->tun_id,output:30</entry>
+ <entry>table=0,in_port=6,actions=set_field:100->tun_id,output:31</entry>
+ <entry>table=0,in_port=7,actions=set_field:100->tun_id,output:32</entry>
+ <entry>table=0,in_port=8,actions=set_field:100->tun_id,output:33</entry>
+ <entry>table=0,in_port=9,actions=set_field:100->tun_id,output:34</entry>
+ <entry>table=0,in_port=10,actions=set_field:100->tun_id,output:35</entry>
+ <entry>table=0,in_port=11,actions=set_field:100->tun_id,output:36</entry>
+ <entry>table=0,in_port=12,actions=set_field:100->tun_id,output:37</entry>
+ <entry>table=0,in_port=13,actions=set_field:100->tun_id,output:38</entry>
+ <entry>table=0,in_port=14,actions=set_field:100->tun_id,output:39</entry>
+ <entry>table=0,in_port=15,actions=set_field:100->tun_id,output:40</entry>
+ <entry>table=0,in_port=16,actions=set_field:100->tun_id,output:41</entry>
+ <entry>table=0,in_port=17,actions=set_field:100->tun_id,output:42</entry>
+ <entry>table=0,in_port=18,actions=set_field:100->tun_id,output:43</entry>
+ <entry>table=0,in_port=19,actions=set_field:100->tun_id,output:44</entry>
+ <entry>table=0,in_port=20,actions=set_field:100->tun_id,output:45</entry>
+ <entry>table=0,in_port=30,tun_id=100,actions=output:5</entry>
+ <entry>table=0,in_port=31,tun_id=100,actions=output:6</entry>
+ <entry>table=0,in_port=32,tun_id=100,actions=output:7</entry>
+ <entry>table=0,in_port=33,tun_id=100,actions=output:8</entry>
+ <entry>table=0,in_port=34,tun_id=100,actions=output:9</entry>
+ <entry>table=0,in_port=35,tun_id=100,actions=output:10</entry>
+ <entry>table=0,in_port=36,tun_id=100,actions=output:11</entry>
+ <entry>table=0,in_port=37,tun_id=100,actions=output:12</entry>
+ <entry>table=0,in_port=38,tun_id=100,actions=output:13</entry>
+ <entry>table=0,in_port=39,tun_id=100,actions=output:14</entry>
+ <entry>table=0,in_port=40,tun_id=100,actions=output:15</entry>
+ <entry>table=0,in_port=41,tun_id=100,actions=output:16</entry>
+ <entry>table=0,in_port=42,tun_id=100,actions=output:17</entry>
+ <entry>table=0,in_port=43,tun_id=100,actions=output:18</entry>
+ <entry>table=0,in_port=44,tun_id=100,actions=output:19</entry>
+ <entry>table=0,in_port=45,tun_id=100,actions=output:20</entry>
+ <entry>table=0,priority=100,actions=drop</entry>
+ </flow_entries>
+ </ovs_bridge>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="ovs_tunnels.py"/>
+</lnstrecipe>
--
2.9.4
6 years, 8 months
lnst-developers:保证产品质量的6个根基?2ywmd
by 先生
研发质量管理——保证产品质量的6个根基
【时间地点】 2017年8月21-22日北京 8月28-29日上海 8月24-25日深圳
【参加对象】 企业CEO/总经理、研发总经理/副总、公司总工/技术总监、公司人力资源总监、研发总经理/副总、质量部经理、QA经理、PMO(项目管理办公室)主任、测试经理等。
【授课方式】 讲师讲授 + 视频演绎 + 案例研讨 +角色扮演 + 讲师点评
【学习费用】 3200元/人,(含课程讲义、午餐、茶点等)
垂·询·热·线:021-31006787、 0755-61280006、 13381601000 许先生
QQ、微信:320588808
注:如不需此类信件信息,请转发送“删除”至tuiding02(a)163.xn--com,,-zl2hwk444acim5sskrd67og69bca386g904fg8ha.
课程背景:
通过产品质量问题的根源分析,发现54%的质量问题源自研发阶段,客户对产品的质量要求越来越高,质量成为产品在市场竞争中脱颖而出的重要武器:
1.如何培养整个公司的质量意识?
2.如何把质量管理活动变成具体开发的人员的自觉行为?
3.如何避免质量管理体系和实际执行“两张皮”?
4.如何把设计中构建产品质量的理念落实到具体的产品开发活动中去?
5.如何通过全流程的质量管理活动获得产品全生命周期成本的竞争优势?
6.如何构建能很好支撑公司核心业务运作的研发质量管理体系?
7.质量管理的职能部门如何设置?如何考评?与业务部门如何协同?
8.什么样的人比较从事研发质量管理,同时这部分人员的出路在哪里?
9.质量管理如何从一个支撑辅助角色,转变为公司研发决策的关键支撑?
这些问题是业界研发管理人员普遍感到困惑的核心问题。本课程通过业界最佳实践的分享、具体的案例研讨等方式,详细介绍研发质量管理六根基,具体涉及:
1.研发质量管理的组织体系
2.结构化的产品开发流程体系与指标体系
3.产品质量策略和质量计划的制定方法
4.产品开发过程中的技术评审体系(产品级+模块级)
5.产品开发的量化管理方法(业务度量、质量度量)
6.质量管理人员的工作职责、方法、职业发展
7.如何避免研发质量管理体系优化虎头蛇尾
课程收益:
1.了解业界产品研发质量管理的最佳模式与实践
2.了解业务导向的研发管理体系在公司管理体系中的位置
3.掌握研发质量管理组织的架构、职责定位
4.掌握结构化的产品开发流程体系、层次间的接口关系
5.掌握产品质量策划和质量计划的制定方法
6.掌握产品开发过程中技术评审的分层分级与操作方法
7.掌握如何建立质量保证体系、开展质量保证工作
8.掌握度量管理的方法及度量结果在过程改进和绩效考核中的应用
9.掌握如何成功在公司内部实施研发质量管理体系优化
课程大纲:
一、案例分析
二、研发质量管理概述
1.研发质量管理体系的六个根基:
1)之一:研发流程与指标体系
2)之二:研发质量的组织保障
3)研发质量执行体系
之三:研发质量策划(质量计划、质量目标)
之四:研发质量控制(评审、测试)
之五:研发质量保证(引导、培训、审计)
之六:研发质量改进(度量、考核、能力基线)
4)根基之载体:文件体系、IT体系
2.研发质量管理在研发价值链中的位置
1)研发质量管理与研发业务流程、研发项目管理之间的关系
2)研发质量管理与市场、制造、采购、客户服务之间的关系
3.研发质量管理中常见的误区(责任主体错位、缺少全流程概念、……)
4.业界常用研发管理模式介绍
1)NPD(PDMA)
8大要素介绍(结构化流程、管道管理、……)
实施实例讲解
2)CMM/CMMI(SEI)
模型/级别/过程域/具体实践
实施实例讲解
3)两者对比分析(优点、改进点、相互配合)
5.研发质量管理体系
1)质量管理新老七工具(关联图、系统图、直方图、控制图、……)
2)研发过程资产库(PAL)(作用、内容、……)
6.实战演练与问题讨论
三、六根基之一:研发流程与指标体系
1.研发流程体系定义方法论:Designflow
1)基于角色、关注客户、锁定开始与结束
2)角色、活动、链接、分支、结束、多线头、返回点、终端与连接
2.研发流程管理体系:
1)L0:公司整体流程体系定义方法论 波特价值链分析模型
2)L1:产品开发流程概览
3)L2:产品开发阶段流程
4)L3:产品开发子流程(软件开发流程、硬件开发流程、测试流程、……)
5)L4:活动定义与角色说明
6)L5:模板、指导书、样例、检查表
7)实例讲解:某案例公司产品开发流程体系介绍
8)使能流程体系
定义
举例:缺陷反馈流程、技术评审流程、问题跟踪流程、审计流程
3.度量的基本概念(定义、作用和目的、度量与测量、驾驶窗、度量模型、……)
1)过程质量指标、交付件质量指标
2)度量模型、度量流程
3)实例讲解:某业界最佳的某公司研发过程能力基线(PCB)
4.质量指标的定义
1)质量目标的分解(逻辑分解、物理分解)
2)实例讲解:某案例公司级质量指标定义
3)实例讲解:某案例公司产品级质量指标定义
4)实例讲解:某案例公司项目级质量指标定义
四、六根基之二:研发质量的组织保障
1.如何设置研发质量管理组织
1)研发质量管理组织设计中存在的误区
2)公司级的质量管理组织如何定位
3)产品级的质量管理组织如何定位
4)项目级的质量管理角色如何定位
5)质量管理与测试、项目管理、文档管理混合在一起的弊端分析
6)质量管理人员的规模确定(业界经验、产品类型、行业竞争、……)
2.质量管理人员的任职资格与职业发展通道
3.什么样的人适合承担QA角色(PQA、SQA、HQA、TQA……)
1)员工不愿意作QA怎么办?
2)没有QA或者兼职QA可能会导致的后果
4.实例讲解:某业界最佳研发质量管理人员的任职资格体系介绍
5.如何培养QA人员?
6.实战演练与问题讨论
五、六根基之三:研发质量策划
1.制定质量计划的时机
2.产品质量策略与产品质量计划的关系
1)实例讲解:某案例公司产品质量策略
2)实例讲解:某案例公司产品质量计划(产品级、软件/硬件项目级)
3.产品质量计划相关的责任主体(谁制定、谁批准、谁配合、谁实施)
4.质量目标定义方法
1)目标、上限、下限
2)公司基线目标、公司基线上限、公司基线下限
5.产品质量计划与产品开发其他计划的配合关系
6.产品质量计划与PHB的关系
7.实战演练与问题讨论
六、六根基之四:研发质量控制之:技术评审(TR)
1.企业在评审操作中常见的问题
1)评审抓壮丁、评审先变科普会、再变批斗会、评审缺少标准靠拍脑袋……
2.业界最佳研发管理企业的评审体系介绍
1)三级评审体系(业务评审、技术评审、正规检视)
3.技术评审(TR)
1)TR的目的、原则
2)TR评审流程(主要活动、输入、输出)
3)各个角色在评审中的定义和职责(SE、PM、QA、技术专家、……)
4)各TR点的评审要素是如何相互支撑的(产品级、模块级、职能领域、……)
5)TR的三个结论
6)评审专家管理方法
7)谁决定TR是否通过?决策团队、项目经理、QA、还是技术专家?
8)如何避免技术评审流于形式?(任职资格、计划确定、评审标准、……)
9)实例讲解:某案例公司具体3级技术评审体系
4.实例讲解:TR的载体:TR IT化
5.实战演练与问题讨论
七、六根基之四:质量控制体系之:测试验证(V&V)
1.研发企业在测试操作中常见的问题
1)基于设计测试、测试过分重复、测试人员地位低下、……
2.产品级渐增测试模型
1)为什么尽早测试?
2)渐增测试的优点分析?(提前发现问题、并行开发、减少测试重复、……)
3.高效测试的前提条件 清晰、明确的需求定义
1)客户化测试思维
2)缺陷引入阶段分析
3)优秀需求的标准
4.高效测试的法宝 刚刚好,不多测,也不少测
1)场景用例设计法,案例讲解
2)边界值用例设计法,案例讲解
3)等价类用例设计法,案例讲解
5.业界测试经验汇总(NASA)
6.实战演练与问题讨论
八、六根基之五:研发质量保证
1.研发质量保证(QA)的理念
1)QA的独立性
2)QA与QC的区别
2.QA工作关系与汇报关系 (PQA、SQA、HQA、TQA……)
3.QA主要活动
1)主要活动之一:产品质量计划
2)主要活动之二:引导培训
3)主要活动之三:产品质量度量
4)主要活动之四:技术评审(TR)
5)主要活动之五:审计
6)主要活动之六:质量活动协调
7)主要活动之七:产品质量回溯
8)主要活动之八:质量报告
9)主要活动之九:准备PHB
10)主要活动之十:收集体系改进建议
4.实战演练与问题讨论
九、六根基之六:研发质量改进
1.企业在质量改进中常见的问题
1)缺少量化数据,管理拍脑袋、数据堆积如山但缺少分析……
2.度量是研发质量改进的基础(没有度量就没有改进,也无法考核)
3.度量结果的应用
1)度量结果应用的常见误区
2)不考虑无人度量、用于考核又导致造假、如何处理?
3)哪些度量指标用于过程改进?
4)哪些度量指标用于绩效考核?
4.质量体系构造方法论:
1)如何处理变革中的人的问题?
2)如何正视研发管理体系优化导致的短期绩效下降?
3)如何分步实施研发管理体系优化?
4)研发管理体系优化3步曲(现状诊断、设计、推行)
5)研发体系优化成功的关键要素
6)实例讲解:分享历史近10家企业研发管理体系优化过程、遇到问题和解决方法
7)高层领导在研发体系优化中的关键作用
讲师介绍:【Don】
研发咨询资深顾问 INCOSE(国际系统工程师联合会www.incose.org)会员
专业背景:
十多年高科技企业的研发与管理实践经验,在某著名高科技企业工作期间,先后担当项目经理、系统工程师、产品经理、软件部经理;先后作为三个产品的主任系统工程师,带领系统分析团队开展客户需求调研、产品特性定义和详细的需求分解与分配等端到端的需求管理工作,奠定了产品市场的成功;长期与国际顶尖咨询顾问一起工作,全程参与该公司研发管理变革项目。曾驻印度工作一年半,先后负责四个合作项目(合作方分别为:BFL、Infosys)的实施,全程参与印度研究所CMM四级认证过程;对业务导向的研发质量管理体系的构建有深入地研究。
研发管理咨询经验:
曾作为项目总监或经理主导了10多个研发管理咨询项目,帮助这些企业全面建立研发管理体系(流程、组织、绩效),有效地提升了这些公司的研发效率和创新能力:
1)华大电子
2)超图软件
3)上海格尔
4)网易
5)重庆奥普泰
6)佳讯飞鸿
7)广联达软件
8)京信通信
9)华胜天成
10)信利半导体
研发管理培训经验:
曾为海尔、研祥科技、宇通重工、康佳集团、北京移动、北大方正、阿里巴巴、华胜天成、南太电子、网易、富港电子、用友软件、星网锐捷、东软股份、格林威尔、金蝶软件、天马微电子、超图地理、华动飞天、新奥特、信利半导体、郎坤软件、深圳桑菲、久其软件、德信无线、新意科技、沈阳移动、光桥科技、斯特奇、合力金桥、蓝托扑、绿盟科技、建行总行开发中心、成都迈普、上海电信、佳讯飞鸿、德信无线、创维集团、威创日新、TCL、日电电子、展讯通信、易思科技、盛大网络、威科姆科技、协同集团、成都索贝、重庆奥普泰、京信通信、汇川技术、亿力吉奥、迈瑞医疗、同方威视、大唐移动、中软国际、北大方正、思源电气、南京华瑞杰、联想网域、天津通广、兴唐通信、寿力亚洲、浪潮计算机、上海华虹、浦发银行、恒宝股份、武大吉奥、广东电信研究院、华宁电子、三安光电、广西博联、东方通信、北京拓明等100多家企业提供了专业的研发管理培训,涉及的行业包括通信、软件、互联网、家电、运营商、芯片等。
6 years, 8 months
lnst-developers:如何把新产品成功的推向市场?ve838
by 先生
成功的产品经理——产品经理的野蛮成长
时间地点:2017年8月21-22北京,8月28-29上海,8月24-25深圳
参加对象:企业CEO/总经理、研发总经理/副总、公司总工/技术总监、公司人力资源总监、产品线总监、产品经理/项目经理、PMO(项目管理办公室)成员、市场总监、技术支持总监等
学习费用:3200/人,(含教材、学习、午餐、茶点等)
咨询电话:021-31006787、0755-61280006 13381601000 许先生
QQ·微信:320588808
注:如不需此类信件信息,请发送“删除'至tuiding02(a)163.xn--com,,-et1hp45dw6qqhaz027ag1e2ez22c.
课程背景:
我们在为国内很多科技企业服务的过程中,发现企业中普遍存在如下问题:
1、产品开发闭门造车,只关注技术,不关注客户,研发从早忙到晚,产品开发的 不少,但赚钱的产品屈指可数产品开发出来才找客户、找卖点,销售人员报怨我们的产品从娘胎中出来就躺在担架上,产品没有优势,也不知道竞争对手产品的弱点,但我们产品的弱点往往被对手抓住。
2、几乎没有产品路标的规划,有规划也主要是技术驱动,客户需求到不了规划人员手中,公司 神经末梢与大脑失去联系。
3、了解市场的不懂技术,懂技术的不了解市场,不知道需求应该谁 负责,缺少完备的需求收集、汇总、分析机制。
4、把销售驱动误以为是市场驱动,销售人员反馈的需求往往是短期行为、而且很个性化,研发 总是被这些短平快的个性化需求驱动的团团转,还被老板骂“你们这帮笨蛋,怎么搞不出几个拳头产品出来?”
当一个企业从单一产品线向多产品线跨越的时候,必须突破的一个瓶颈就是公司产品经理的培养,因为产品经理是公司价值链中最重要的一个环节,是直接面向客户、带领团队创造价值的领军人物,因此产品经理个人及其所率领的团队的能力往往决定了该产品在市场上的竞争力。然而,很多发展中的企业在构建产品管理体系和培养产品经理的过程中却面临很多困惑,比如:
1.产品经理该如何定位?其职责是什么?
2.产品经理需要具备什么样的能力?如何培养?
3.如何与客户有效沟通,从而发掘客户的隐性需求?
4.如何从大量的需求信息中提炼出核心的客户需求?
5.如何策划有竞争力的差异化产品?
6.如何确保策划的核心需求在开发过程中被充分实现?
7.如何把新产品成功的推向市场?
8.如何避免产品经理沦落成“问题经理”?
9.如何实现产品经理从“单挑”模式向“打群架”模式的转变?
10.如何构建适合产品经理成长的优良土壤?
……
基于以上典型问题,我们结合大量的培训 和咨询案例,并不断 总结,从而推出该课程,案例、模板、经验、教训、学员分享等贯穿全课程。
培训收益:
1.了解产品经理产生的背景、时机
2.了解不同时期、不同行业的产品经理定位、职责、素质、能力要求
3.理解产品经理、项目经理、市场经理的关键区别以及相应的组织运作
4.理解产品经理的核心能力是如何折腾出来的
5.掌握如何才能持续策划出有竞争力的产品的方法
6.掌握产品经理如何有效的监管产品开发过程而不需要过度陷入的方法
7.掌握新产品上市管理的方法,确保营销团队顺利接手新产品的销售
8.掌握产品生命周期管理的基本方法和决策机制,把脉产品的退市时机
9.了解业界如何培养产品经理的方法
10.分享讲师50多个咨询项目的产品管理和产品经理队伍建设的案例资料(流程、制度、模板、样例……)
课程大纲:
一、案例分析
二、锦囊之一:搞清研发项目经理的定位、职责与素质模型
1.走上研发项目经理的工作岗位要实现哪些角色转换?
1)从专注于技术变为关注项目
2)自己做好事情到带动整个研发团队
3)从部门内走到部门外,贯穿全流程
4)从关注事情到关注人和事
2.研发项目经理在公司如何定位
1)公司核心价值创造的环节
2)横向角色
3)项目型公司、产品型公司、运营型公司的项目经理的不同定位
3.研发项目经理如何把握项目的本质
1)研发项目管理和运营管理的区别
2)研发项目管理管什么?不管什么?
3)如何从“土匪”变为“正规军”
4)吃透研发项目的四要素
5)平衡研发项目的S、T、Q、C
4.研发项目经理有哪些职责?
5.什么样的人适合做研发项目经理
1)技术能力
2)业务能力
3)项目管理与团队管理的能力
4)人际沟通与处理冲突的能力
5)个人影响力
6.案例分析:某案例公司的研发项目经理的素质模型
7.如何培养研发项目经理
1)建立项目经理的素质模型
2)资源池的培养体系
3)研发项目经理培养积分卡
4)干中学,学中干
8.演练与问题讨论
三、锦囊之二:如何锁定项目的目标
1.研发项目目标的制定
1)研发项目目标制定的标准
2)研发项目目标制定的原则
3)如何完成研发项目目标的制定
2.案例分析:某案例公司研发项目任务书模板
3.研发项目在公司项目中的排序
4.如何根据项目的目标来组建项目团队
5.制定项目目标时如何与公司高层沟通
1)获得高层的认可
2)获得公司的资源
3)汇报机制达成共识
6.演练与问题讨论
四、锦囊之三:如何搞定需求并控制变更
1.产品需求收集(如何从市场角度进行有效的客户需求收集?)
1)研发需求收集流程介绍
2)识别客户?
3)需求收集渠道:外部渠道与内部渠道
4)需求收集需要注意的问题
2.需求收集方法
1)原型法
2)客户访谈法
3)现场观察法
4)其他十种典型的需求收集方法
a.客户决策委员会、用户大会、客户简报
b.高层拜访、标杆学习、Beta测试
c.现场支持、支持热线、行业会议
d.客户满意度调查
e.各个方法的优点、缺点、需求收集的类型介绍
3.需求收集的输出:客户需求收集模板(单项需求收集模板)
4.产品需求整理和分析(如何对客户需求进行整理和分析,形成产品包需求?)
1)研发需求整理和分析流程介绍
2)真正理解客户的意图
3)客户描述和需求陈述
4)客户描述? 需求陈述五原则
a 案例:具体产品客户描述到需求陈述案例分析
5)业界最佳客户需求的八个要素介绍
a 每个要素详细定义
b 每个要素的子要素分解
c 案例:某产品客户需求8要素子要素展开样例介绍
6)如何保证需求的一致性
a 需求冲突矩阵分析法
b 案例:具体需求冲突矩阵分析样例介绍
c 实战演练与问题讨论
5.产品需求的跟踪和验证
1)研发需求持续验证和跟踪流程介绍
2)需求双向跟踪机制(RTM)
a 需求编号规范介绍
b 需求跟踪的必要性
c 前向跟踪
d 后向跟踪
3)需求验证和确认
4)需求验证和跟踪输出(需求双向跟踪模板RTM(关键要素介绍))
6.需求变更控制机制
1)谁负责需求的变更控制
2)如何评估需求变更的影响
3)需求变更的追踪机制
7.演练与问题讨论
五、锦囊之四:研发项目计划制定与控制的能力
1.一个完整的研发项目计划应该考虑的方面
2.研发项目计划包括
1)进度与资源计划
2)质量管理计划
3)风险管理计划
3.进度与资源计划
1)讨论:公司在研发项目计划制定中存在的问题?
2)研发项目计划的作用
3)研发项目计划制定的流程
4)研发项目计划的分级分层管理体系
4.研发项目计划的制定的步骤
1)WBS:最基本的往往是最厉害的(作用、示例)
2)WBS分解的衡量标准
3)PBS、WBS、OBS、RBS之间的对应关系
4)五种常见的估计方法
5)规模、工作量、工期估计
6)PERT图的绘制
7)如何加快项目开发进度
a 关键路径法
b 快速跟踪法
5.质量第一,计划先行
6.谁忽略风险计划,风险就找谁
7.难道沟通也要做计划?
8.十大提高项目执行力的行为
9.借助工具保证执行落地
10.研发项目的分层实施与分层监控
11.研发项目控制的手段:报告+会议
1)项目报告种类
2)项目例会种类
3)变更控制流程
4)业务决策评审
5)研发合同书管理
6)项目审计
7)成本控制
8)QA状态报告
12.演练与问题讨论
六、锦囊之五:研发项目经理绩效管理的能力
1.制定研发项目KPI指标的方法
1)平衡计分卡方法
2)鱼骨图方法
2.考核研发项目的常规KPI指标有哪些?
3.如何把研发项目的目标分解给研发人员
4.研发人员绩效承诺管理
1)对结果的考核
2)对过程的考核
3)对团队意识的考核
5.研发人员制定绩效目标存在的问题分析
1)目标不具挑战性或太具挑战性
2)需求的变更导致项目计划变更,影响绩效目标
3)绩效目标如何量化
6.绩效承诺目标的跟踪与修改
7.研发项目经理如何辅导研发人员的绩效
1)针对不同的员工制定不同的绩效辅导方法
2)绩效辅导的类型
8.研发项目经理如何做好研发人员的绩效评价
1)绩效评价的流程和方法
2)研发项目经理如何与部门经理沟通
9.公司如何从制度上保证项目经理的权威性
10.演练与问题讨论
七、锦囊之六:研发项目经理沟通与处理冲突的能力
1.研发沟通的障碍
1)研发项目管理十大危机之首:缺乏沟通
2)研发沟通的过程、目的和功能
3)研发过程的信息偏差
2.约哈利窗沟通分析
3.沟通的种类
1)正式沟通与非正式沟通
2)书面沟通与口头沟通
3)上行、下行、平行沟通
4)单向与双向沟通
4.研发沟通方式比较
5.如何与上级沟通
1)领导的沟通类型对沟通的影响
2)与领导商谈的难题、要点
3)高层领导喜欢的沟通方式
4)向领导汇报方式和工具
5)汇报会上领导常问的问题
6.如何跨部门沟通
1)不同研发组织架构沟通中要注意的问题
2)跨部门沟通障碍——部门墙
3)等级制度:上司文化
4)平级沟通:自我保护
5)跨部门沟通要点——沟通从心开始
7.项目团队内如何沟通
1)研发人员的沟通特点、缺陷
2)与技术型团队沟通
3)与关系型团队沟通
4)员工沟通需求
5)明确授意——5W2H
8.什么时候冲突具有破坏性
9.什么时候冲突具有建设性
10.研发冲突原因(讨论)
1)目标、有限的资源、方法、事实、价值、角色、风格
11.如何避免冲突(讨论)
12.冲突与研发组织绩效果
13.解决研发冲突的四方面工作
1)组织氛围
2)沟通(GROW方法论)
3)冲突反应风格
a 回避型
b 强硬型
c 迁就型
d 折衷和解型
e 协作型
4)问题解决流程
14.演练与问题讨论
八、总结
1.研发项目经理如何实现角色转换
1)兵熊熊一个,将熊熊一窝
2)怎么才能不是熊将
2.六个锦囊如何融会贯通
1)此时无招胜有招
2)总结、提炼、升华
6 years, 8 months
lnst-developers:新员工有激情,没有业绩,怎么办? 8:48:41
by 先生
销售精英2天强化训练
【时间地点】2017年8月05-06北京,8月12-13上海
【培训对象】总经理、销售总监、区域经理、销售经理、业务代表、销售培训专员等。
【学习费用】2800/人(含两天中餐、指定教材、茶点)
【报名电话】0755-61280006、 13381601000 许先生
【QQ/ 微信】320588808
Judge(评价)一个人,一个公司是不是优秀,不要看他是不是Harvard(哈佛大学), 是不是Stanford(斯坦福大学).不要judge(评价)里面有多少名牌大学毕业生, 而要judge(评价)这帮人干活是不是发疯一样干,看他每天下班是不是笑眯眯回家! ―― 阿里巴巴公司马云
【培训背景】
1、新员工有激情,没有业绩,怎么办?
2、为什么才做了2年,老员工就出现了职业倦怠,不知上进怎么办?
3、有些销售人员遇到一点挫折就灰心伤丧气怎么办?
4、客户提出异议,有些销售人员就不知所措,怎么办?
5、单子死掉,销售人员都还不知道怎么回事;
6、见到客户很容易冷场,找不到话说怎么办?
7、为什么销售人员轻易给客户亮出自己的“底牌”?
8、为什么不同的客户,销售人员说词千篇一律?
9、为什么第一次上门后,第一次打完电话后业务员就不知道怎么跟进?
【课程大纲】
第一章 客户需求分析
第一节 为什么要对客户需求进行分析?
1、了解客户的背景,购买的标准,做到知已知彼,交流更有针对性;
2、从分析产品的“卖点”转变到研究客户的“买点”,了解什么样的客户需要比了解客户需要什么更重要;
3、引导客户,控制谈话的方向、节奏、内容,而不是漫无边际;
4、有目的地做好拜访计划,每次沟通都有新的话题和收获;
5、主动出击,不要一味地防守,被动地等待着奇迹的发生,谈而有“判” ;
6、客观理性分析,有果必有因在前,有因必有果在后,一因多果,一果多因;
7、不要包办代替,用自己的头脑去替客户思考,用自己的价值选择去代替客户的价值选择.
8、销售人员要具备独立判断的能力:
8.1 客户理想所需与现实所需不一致;
8.2 客户说得与做的不一致;
8.3 客户前后言语不一致;
8.4 不同的人要求不一致;
8.5 客户理解与销售理解不一致.
案例:为什么见到客户找不到话说?
案例:如何进行二次、三次等后续的跟进?
案例:客户明明已承认我们产品非常适合他,为什么还需要比较一下?
案例:我非常自信地告诉给客户选择我们是正确的,为什么他们不信?
案例:判断谁是关键人的8个因素
案例:如何判断客户的信誉度、忠诚度?先货后款的依据是什么?
第二节 客户需求分析步骤
1、了解客户采购的经历;
2、判断客户当前价值与未来价值;
3、判断客户的接受能力,内行还是外行;
4、了解客户购买的标准;
5、对客户购买的需求进行确认;
6、与客户共同确定采购的标准
作业:如何设计客户需求分析手册?
第二章 如何正确推荐产品
案例:为什么我满足客户所提出的要求,客户却还需要考虑一下?
案例:为什么客户不相信我质量与服务的承诺?
第一节 为什么需要我们正确地推荐产品?
一、客户往往对自己深层次的问题并不清楚;
二、客户的提出的要求可能是模糊或抽象,有的仅仅提出方向,不要局限于客户明显的问题,头痛医头,脚痛医脚;
三、客户往往会以我们竞品给他的条件要求我们,想要的不一定就是他需要的
四、满足客户提出的要求,是引导客户在不同公司之间做比较,而不在我公司做出决策;
五、好产品,不一定是最适合的,最适合的产品才是最好的:
1、适当的数量 2、适当的价格
3、适合的时间 4、适当的地址
5、适当的质量
案例:客户关心的是你如何保证你的质量和你的服务水平
第二节 如何帮助客户建立“排他性”的采购标准?
推荐产品中常用的34项内容:品牌、成本、质量、供货能力、地理位置、市场地位、成功案例、
生产技术与设备、可靠性、样品、技术服务、交货…
第三章 如何有效处理异议
一、对事不对人,你如何看别人,别人就会如何看你
案例:遇到小气、固执、粗鲁、啰嗦、刻薄、吹毛求疵、优柔寡断的客户应对?
案例:客户直接挂电话,怎么办?
案例:刚见面,客户就对我发火,怎么办?
二、客户异议处理要有6个区分:
1、要区分“第一” 还是“唯一”
2、对客户要求的真伪进行鉴别;
3、要区分“情绪”还是“行为”
4、区分“假想”还是“事实”
5、区别问题的轻重,缓急;
6、心里想的和实际做.
三、理解客户采购的心态;
1、客户谈判时常用7种试探技巧分析;
2、为什么有些客户对我们态度非常好,可是就是不下单?
3、为什么有些客户让我们感觉高高在上,花钱是大爷?难道他们素质真的差?
4、客户自身会有哪6个压力?
案例:客户提出合理条件,是否我就应该降价?
案例:如何分清客户异议的真实性?
案例:当谈判出现僵局时怎么办?
案例:为什么我答应客户提出的所有的条件,反而失去了订单?
案例:客户一再地提出不同的条件,怎么处理?
案例:客户要求我降价时,怎么办?请分8个步骤处理
第四章 如何建立良好的客情关系?
案例:做销售工作是否就需要疯狂、圆滑、奉承、见人说人话,见鬼说鬼话吗?
第一节 做回真实和真诚的自己,表里如一
1、演别人,再好的演技也会搞砸,想做别人的时候,你就会离自己很远;
2、不同的人,需求不同,越改越累,越改越气,只会把自己折磨得心浮气躁,不得人心;
3、以朋友的心态与客户交往,过多的商业化语言、行为、过多的礼仪只会让客户感觉到生硬、距离、
排斥、公事公办,没有感情;
4、适当的暴露自己的缺点,越完美的人越不可信;
5、守时,守信,守约,及时传递进程与信息,让客户感觉到可控性;
第二节 感谢伤害我的人,是因为我自己错了;
案例:及时发现客户的潜意识:
1、一味顺从:对销售人员每一句话都表示绝对赞同;
2、推卸责任:认为都是别人的原因,而与自己无关;
3、理论交谈:客户用专业术语与业务员谈,潜意识是对业务员怀疑;
4、谈论小事:客户对会谈中无关紧要的小事谈论不止;
5、无诚信:不按约定的时间见面,或借故迟到或找理由早退,不按约定要求提供信息资料,不付或延付订金;
第三节 摆正自己的位置
1、强势是体现在公司以及产品本身,而不是体现在销售人员本人;
2、让别人变得伟大,而不是自己,不要贬低任何人;
3、低调是最牛的炫耀,地低为海,人低为王;
4、会哭的孩子有奶吃,会哭的女人最聪明。
案例:自我暴露的四个层次:
第一层:兴趣爱好、饮食习惯、偏好等;
第二层:对周边的人(非家人)或事的看法;
第三层:自己的自卑情节、和家人的亲密关系;
第四层: 个体不为社会接受的一些想法和行为。
案例:生意不成仁义在,咱俩交个朋友,这句话应该由谁说?
案例:邀请客户吃饭,你应该怎么说?
案例:当客户表扬了你,你会怎么回答?
案例:我代表公司的形象,是否我应该表现自己很强势?
案例:为了获得客户的信任,我是否应该花重金包装自己?让自己很完美?
案例:为什么我对客户非常有礼貌,但却感觉到有很距离?
第五章 团队配合,尽己之力,不如尽人之力
案例:当客户老板不接受我的时候,应该怎么办?
案例:我不敢陌拜怎么办?我技术知识缺乏怎么办?我不会应酬怎么办?...
案例:多次上门拜访被拒绝,没有信心怎么办?
案例:新员工进入公司后没有方向怎么办?
案例:是不是世界上任何两个人在一起都会有团队精神?
第一节、团队配合的重要性:
1、一已是人,众人是天;谋事在人,成事在天;
2、没有完美的个人,只有完美的团队;成功是因为优势,弥补缺点只能变得平庸;
4、二八法则决定了80%人想成功需要借助20%人的力量;
5、不要用自己的缺点与别人的优势相比;
6、不要把专才当全才用,你讨厌做的事,刚好是别人喜欢做的事。
第二节、重新树立对团队的认识
团队前提一:互补性,同性相斥,异性相吸,一山不容二虎;
1.1 对销售工作岗位进行分析,区分12种不同的技能;
1.2 性格的互补,6种不同性格特征;
1.3 价值互补:追求权、追求钱、追求情感
团队前提二:利益交换,没有永远的朋友,只有永远的利益;
团队前提三:情感认可,团队成员的感情是天生的;
案例:店面/展厅销售的团队合作模式
案例:大客户销售的团队合作模式
案例:客户信息量大的团队合作模式
案例:新员工团队合作模式建议
第三节、不同客户喜欢不同风格的销售人员
1、销售人员形象与举止,注意自己的形象;
2、是否具备相似的背景,门当户对;
3、是否具备相同的认识,道不同不相为盟;
4、是否“投其所好”,话不投机半句多;
5、赞美,喜欢对方,我们同样对喜欢我们的人有好感;
先交流感情,增进互信,欲速则不达;
6、是否对销售人员熟悉,销售最忌讳交浅言深;
初次见面就企图跟别人成为朋友的行为很幼稚;
初次见面就暗示好处的行为很肤浅;
刚见面就强调价格很便宜的行为很愚蠢;
7、销售人员是否具备亲和力,别人的脸是自己的一面镜子;
成交并不取决于说理,而是取决于心情
8、销售人员是否值得信赖。
第六章 新客户开发
一、客户是根据自己所投入的精力、金钱来确定自己的态度;
二、如何才能引导客户作自我说服?
案例:为什么客户一开始很有兴趣,但迟迟不下单?
案例:前天明明说不买的客户居然今天却买了,为什么?
案例:客户答应买我司的产品,却突然变卦买别人的了,为什么?
案例:为什么我们会买很多自己没有兴趣的而且并不需要的产品?
案例:合同签订后,应该问哪4句话,提升客户忠诚度?
第七章 见什么人,说什么话
时间、能力、精力、兴趣、文化水平、不同的职位等的影响因素
1. 什么情况下偏重于理性说服,打动别人的脑?
2. 什么情况下偏重于情感说服,打动别人的心?
3. 何种情况下只讲优势不讲劣势?
4. 何种情况下即讲优势又讲劣势?
第八章 建立长期的职业规划
1、功利心太重,导致客户拒绝,钱是给内行的人赚的;
2、世界上没有好工作,好工作是自己做出来的;
3、以前的经验在新工作中不一定解决目前的问题;
4、不要有托付心态,男怕入错行,女怕嫁错郎;
5、检讨自己是成功的开始,检讨别人是失败的开始;
【讲师介绍】 王越老师
1、曾任可口可乐(中国)公司业务经理;阿里巴巴(中国)网络技术有限公司业务经理;
2、清华大学.南京大学EMBA特邀培训讲师;新加坡莱佛士学院特约讲师;
3、2000年至今一直从事销售与销售人员激励与训练工作,曾任可口可乐的业务经理,全球知名企业 阿里巴巴公司的业务经理,曾每月疯狂上门拜访100家以上的客户,半军事化的销售职业生涯, 高强度的工作压力,全面系统的受训经历,积累了丰富的客户收集、销售谈判、客户跟进、客户服务、 自我激励的经验,在公司曾获“悍将杯”榜眼。
【曾经培训过的部份客户】
华为公司/立邦漆业/太平保险/欧普照明/可口可乐/扬子石化/飞利浦/百度/中国移动/北京东信北邮/ 中国联通/成都通发集团/携程网络/广州方圆房产/深圳南海酒店/桂林三金药业/三一重工/深圳宝德集团/ 义乌邮政局/广西水电工程局/重庆煤科院/深圳特发股份/北京曲美家私 /九阳电器/珠港机场/巢湖邮政/ 济南邮政/南京医药总公司/国美电器/雨润集团/中国一拖集团能源分公司/重庆科创学院
【温馨提示】本课程可为企业提供内训,欢迎来电咨询!
6 years, 8 months
采 购招投标管理及合同风险控制
by 巫总
504265504265504265504265��05:15:37
��.��.��.��.��.��.��.����
6 years, 8 months
先生:招用待岗、内退、停薪留职的人员,应注意哪些细节问题? 18:26:35
by 先生
新《劳动合同法》、《社会保险法》、《工伤保险条例》
实操应对策略与有效调岗调薪、裁员解雇及违纪问题员工处理技巧
2017年
8月14-15 上海(B单元) 9月15--16日上海(A单元)
8月18-19 深圳(B单元) 9月22--23日深圳(A单元)
8月25-26 北京(B单元) 9月29--30日北京(A单元)
7月28-29 广州(A单元) 8月30--31日广州(B单元)
注明:该课程2天为一个单元,A单元与B单元内容是完全独立的不分先后顺序,客户可根据自己需求选择参加A单元或者B单元,或AB单元均参加,可以参加完A单元再参加B单元或者先参加B单元再参加A单元均可,A单元与B单元内容请看下面的课程大纲!!!
【参加对象】 董事长、总经理、副总经理、人力资源总监/经理/专员及人事行政管理人员、工会干部、法务人员及相关管理人员、相关律师等。
报名方式:021-31006787、0755-6128-0006 13381601000 许先生
QQ·微信:320588808
注:如不需要此类信件信息,请发送“删除”至tuiding02(a)163.xn--com,,-zl2hwk444acim5sskrd67og69bca386g904fg8ha.
课程背景:
2008年,国家出台了《劳动合同法》、《劳动合同法实施条例》、《劳动争议调解仲裁法》、《职工带薪年休假条例》、《企业职工带薪年休假实施办法》;2009年,国家出台了《劳动人事争议仲裁办案规则》;2010年,国家出台了《劳动争议司法解释(三)》及修改了《工伤保险条例》;2011年,国家出台了《社会保险法》及《实施<社会保险法>若干规定》;2012年,国家出台了《企业民主管理规定》、《女职工劳动保护特别规定》及修改了《职业病防治法》;2013年,国家出台了《劳动争议司法解释(四)》、《劳务派遣若干规定》;2014年……
上述法律法规政策的持续实施,客观上要求企业精打细算,否则无法承受与日俱增的用工成本;客观上要求用人单位做到“精细化”管理,否则难以证明劳动者“不合格、不胜任、严重失职、严重违纪违规”,也难以进行合法有效的“调岗调薪、裁员解雇”。如果用人单位依然实施“传统式、粗放式、随便式”的管理,那么用人单位必将面临巨大的用工风险和赔偿责任,其管理权威也将受到严峻的挑战!
为帮助广大企事业单位了解相关政策法律法规,掌握防范用工风险和化解劳动争议的技能技巧,以实现低风险、低成本、高绩效的人力资源管理目标,特邀请我国知名的劳动法与员工关系管理实战专家钟永棣老师主讲此课程。欢迎企事业单位积极组织相关人员参加此培训课程!
培训收益:
1、全面了解劳动用工过程的法律风险;
2、理解与劳动用工有关的政策法律法规;
3、培养预测、分析劳动用工法律风险的思维;
4、掌握预防和应对风险的实战技能及方法工具……
课程特色:
稀缺性:此课程将劳动法体系和薪酬绩效管理体系紧密相结合,国内极少出现此类课程。
针对性:课程内容精选了过去5年来主讲老师亲自处理过的且在不少用人单位内部也曾发生过的代表性案例,这些案例完全符合中国现阶段的大环境大气候,极具参考性和启发性。
实战性:实战沙盘演练,学员深入思考与充分互动,老师毫不保留倾囊相授;学员把错误留在课堂,把正确 的观点、方法、工具、技能带回去。
课程大纲:
A单元内容(共2天,15个以上经典案例)
专题一:招聘入职
1.如何预防劳动者的“应聘欺诈”,如何证明劳动者的“欺诈”?
2.招收应届毕业生,应注意哪些细节问题?
3.招用达到法定退休年龄的人员,应注意哪些细节问题?
4.招用待岗、内退、停薪留职的人员,应注意哪些细节问题?
5.入职体检需注意哪些细节问题?
6.入职前后用人单位应告知劳动者哪些情况,如何保留证据?
7.《入职登记表》如何设计,才能起到预防法律风险的作用?
8.劳动者无法提交《离职证明》,该怎么办?
9.企业如何书写《录用通知书》,其法律风险有哪些?
专题二:劳动合同订立
1.用人单位自行拟定的劳动合同文本是否有效,是否需要进行备案?
2.劳动者借故拖延或拒绝签订劳动合同,用人单位如何应对?
3.未签订劳动合同,需支付多长期限的双倍工资?是否受到仲裁时效的限制?
4.劳动合同期满,继续留用劳动者,但未续签合同,是否也需支付双倍工资?
5.什么时候为最佳时间,签署劳动合同、用工协议?
6.法律禁止2次约定试用期,劳动合同期限和试用期限该如何约定?
7.用人单位收购其他组织时,如何与被接收的员工签订、变更劳动合同?
8.应否与属于职业经理人的法人代表签订劳动合同?
专题三:试用期
1.可否先试用后签合同,可否单独签订试用期协议?
2.员工主动申请延长试用期,该怎样操作,才规避赔偿风险?
3.试用期满后辞退员工,最少赔2个月工资,该如何化解?
4.试用期最后一天辞退员工,赔偿概率为70%,如何化解?
5.试用期满前几天辞退员工,赔偿概率为50%,如何化解?
6.不符合录用条件的范围包括哪些,如何取证证明?
7.《试用期辞退通知书》如何书写,以避免违法解除的赔偿金?
8.出现“经济性裁员”情况,优先裁掉试用期的新员工,合法吗?
专题四:无固定期限劳动合同
1.无固定期限劳动合同到底是不是铁饭碗,会不会增加企业成本?
2.无固定期限劳动合同解除的条件、理由有哪些?
3.用人单位拒绝签订无固定期限劳动合同,有何风险?
4.签订了固定期限劳动合同的员工,期间工作累计满10年,能否要求将固定期限合同变更为无固定期限合同?
5.连续订立二次固定期限劳动合同到期,用人单位能否终止合同;员工提出签订无固定期限合同,用人单位能否拒绝?
6.合同期满劳动者由于医疗期、三期等原因续延劳动合同导致劳动者连续工作满十年,劳动者提出订立无固 定期限劳动合同的,用人单位能否拒绝?
专题五:特殊用工协议
1.培训服务期与劳动合同期限有何不同,劳动合同期限与服务期限发生冲突时如何适用?
2.培训服务期未到期,而劳动合同到期,用人单位终止劳动合同的,是否属于提前解除劳动合同,如何规避 ?
3.劳动者严重过错被解雇,用人单位能否依据服务期约定要求劳动者支付违约金?
4.在什么情况下,可签署竞业限制协议?
5.在什么时候,企业更有主动权签署竞业限制协议?
6.无约定经济补偿的支付,竞业限制是否有效?
7.竞业限制的经济补偿的标准如何界定?
8.要求员工保密,企业需要支付保密工资吗?
专题六:劳动关系解除终止
1.双方协商解除劳动合同并约定支付适当的经济补偿,事后劳动者追讨经济补偿的差额部分,仲裁机构有可 能支持劳动者的诉求,企业如何避免案件败诉?
2.能否与“三期妇女、特殊保护期间的员工”协商解除,如何规避风险?
3.员工未提前30日通知企业即自行离职,企业能否扣减其工资?
4.员工提交辞职信后的30天内,企业批准其离职,可能有风险,如何化解?
5.员工提交辞职信后的30天后,企业批准其离职,也可能有风险,如何化解?
6.对于患病员工,能否解除,如何操作才能降低法律风险?
7.实行末位淘汰制,以末位排名为由解雇员工,往往被认定非法解雇,企业该如何做,才避免案件败诉?
8.以“组织架构调整,无合适岗位安排”为由解雇员工,感觉非常符合常理,但往往被认定非法解雇,企业该如何做才避免风险?
9.以“经济性裁员”名义解雇员工,感觉非常符合常理,但往往被认定非法解雇,企业该如何操作?
10.《解除劳动合同通知书》如果表述不当,往往成为劳动者打赢官司的有力证据,企业该如何书写,才避免案件败诉而承担法律责任?
11.解除劳动合同前未通知及征求工会的意见,是否构成非法解除?
12.劳动合同到期后,经常出现该终止的忘记办理终止手续,该续签的忘记办理续签手续,其引发的风险非常大;那么企业该如何规避风险?
专题七:社会保险法
1.用人单位拖欠社保费,有什么法律责任?
2.用人单位不足额缴纳社会保险如何处理?
3.员工不愿意买社保,并与单位签有协议的情况下,该协议是否有效?
4.试用期间,是否必须缴纳社会保险?
5.如果无参保,劳动者因第三方责任产生的医疗费用,能否要求单位报销?
6.企业协助辞职员工骗取失业保险金,有什么法律风险?
7.女职工未婚先孕、未婚生育争议如何处理?
8.怀孕女职工提出长期休假保胎,直至修完产假,该如何协调此问题?
专题八:劳动争议处理
1.用人单位败诉的原因主要有哪些?
2.仲裁或法院在处理案件时,如何适用法律法规?
3.如何判定政策法律法规的效力等级?
4.公开审理的开庭形式,有何风险,如何避免风险?
5.申请仲裁的时效如何计算;如何理解“劳动争议发生之日”?
6.如何书写答辩书,有哪些注意事项?
7.开庭期间,质证与辩论需要注意哪些关键问题?
8.举证责任如何分配,无法举证的后果有哪些?
B单元内容(共2天,15个以上经典案例)
专题一:绩效管理与岗位调整
1.企业单方调整岗位,员工往往可被迫解除合同并索赔经济补偿,如何规避?
2.调岗时没有书面确认,员工到新岗位工作2个月后能否要求恢复到原岗位?
3.可否对“三期内”女职工进行调岗、调薪?
4.员工认同绩效结果,为什么在“不胜任工作”引发的争议中还是败诉?
5.为什么企业根据绩效结果支付员工绩效奖金,最终被认定非法克扣工资?
6.法律上如何证明劳动者“不能胜任工作”?
7.对绩效考核不合格的员工,如何合法辞退?
8.绩效正态分布往往强制划分5%的员工为不合格者,是否合法?
专题二:劳动报酬、薪酬福利
1.工资总额包括哪些工资明细?
2.新进员工薪资管理问题及处理技巧;
3.调整工作岗位后,可以调整薪资标准吗?
4.如何通过薪酬调整处理员工失职、违纪等问题?
5.值班算不算加班?
6.加班加点工资支付常见误区?
7.用人单位如何设计工资构成以降低加班费成本?
8.未经用人单位安排,劳动者自行加班的,是否需支付加班工资?
9.劳动者主张入职以来的加班费,如何应对?
10.劳动者在工作日\法定节假日加班,能否安排补休而不予支付加班费?
11.病假、年休假、婚假、产假、丧假等的享受条件及工资待遇标准?
12.离职员工往往回头追讨年终奖,有可能得到支持,如何规避该风险?
专题三:违纪违规问题员工处理
1.劳动者往往拒绝签收处分、解雇通知书,如何应对?
2.问题员工往往拒绝提交《检讨书》或否认违纪违规事实,企业该如何收集证据?
3.对于违纪员工,应该在什么时间内处理?
4.怎样理解“严重违反用人单位的规章制度”?
5.如何在《惩罚条例》中描述“一般违纪”、“较重违纪”及“严重违纪”?
6.怎样理解“严重失职,营私舞弊,给用人单位造成重大损害”?
7.如何界定“重大损害”,“重大损害”是否必须体现为造成直接的经济损失?
8.如何追究“严重失职、严重违纪违规”者的法律责任?
9.能否直接规定“禁止兼职,否则视为严重违纪违规”?
10.直线部门经理擅自口头辞退员工,仲裁机构往往认定企业非法解雇,企业该如何做,才避免案件败诉?
11.劳动者不辞而别、无故旷工,却主张被企业口头解雇,往往得到仲裁机构的支持,企业该如何做,才避免案件败诉?
12.“录音录象”证据,仲裁与法院是否采信;企业内部OA系统上的资料能否作为证据使用;电子邮件、手机短信能否作为证据使用?
专题四:经济补偿
1.用人单位需向劳动者支付经济补偿的情形有哪些?
2.什么情况下用人单位需支付两倍的经济补偿?
3.劳动者可否同时向用人单位主张经济补偿和赔偿金?
4.经济补偿计算的基数及标准如何确定?
5.经济补偿年限最高不超过十二年的适用范围?
6.如何计算《劳动合同法》生效前后的经济补偿年限?
7.如何理解“六个月以上不满一年的,按一年计算;不满六个月的,向劳动者支付半个月工资的经济补偿”?
8.劳动合同法环境下“50%额外经济补偿金”是否继续适用?
专题五:规章制度、员工手册
1.企业人力资源管理体系中哪些内容跟劳动法有必然联系?
2.人力资源、劳动用工管理制度应该包括哪些必备内容?
3.制定规章制度的程序要求给用人单位带来哪些风险,如何应对?
4.非国有用人单位如何组建“职工代表大会”?
5.无纸化、网络化办公下的公示,存在哪些风险?
6.如何公示或告知,更符合仲裁或诉讼的举证要求?
7.规章制度能否规定对员工进行经济处罚?
8.规章制度违反法律法规,劳动者可以被迫解除并索取经济补偿,如何防范?
专题六:工伤保险条例
1.属于工伤范围的情形有哪些?
2.不得认定为工伤的情形有哪些?
3.怎样理解“上下班途中”,怎样控制期间的风险?
4.发生工伤事故,用人单位需承担哪些费用?
5.工伤员工借故拒绝复工,借故不断休假,如何处理?
6.对于第三方造成的工伤事故,劳动者能否要求用人单位支付工伤待遇又同时要求第三方支付人身伤害赔偿 ?
7.用人单位能否以商业保险理赔款替代职工工伤赔偿待遇?
8.发生工伤事故,双方私下和解,补偿协议该如何签订才有效?
专题七:劳务派遣
1.劳务派遣用工模式,有何利弊,利大还是弊大?
2.劳务派遣合作协议必须注意的风险细节有哪些?
3.新法下劳务派遣面临的主要风险有哪些?
4.派遣工“第三签”时,能否要求签订无固定期限劳动合同?
5.哪些岗位可以使用派遣工,辅助性、临时性、替代性如何理解与操作?
6.新规定对于同工同酬提出哪些新要求,如何规避同工同酬风险?
7.采用劳务派遣用工方式,能否异地参保?
8.用工单位如何行使对派遣员工的退还或退换权?
9.如何处理违反用工单位规章制度的派遣员工?
10.怎样规定派遣员工的辞职程序和离职责任?
11.部分劳务公司很可能面临关闭停业,原来的派遣工的劳动关系如何处理?
12.业务外包与劳务派遣的本质区别有哪些?
13.如何筛选承包方,需考察哪些细节要点?
14.用工单位如何应对派遣合作争议和劳动争议?
讲师介绍:【钟永棣】
资深劳动法专家
教育背景:
国内著名劳动法与员工关系管理实战专家、劳动仲裁员、企业劳动争议预防应对专家、高级人力资源管理师、高级劳动关系协调师,国内第一批倡导、传播、实施“国家劳动法与企业薪酬绩效有机整合”的先行者;国内原创型、实战型、顾问型的培训师。
现任“劳律通(中国)顾问中心”、中华创世纪培训网首席顾问,上海成通律师事务所投资合伙人;兼任时代光华管理学院、深圳外商投资企业协会、广州市劳动保障学会、广州市人力资源市场服务中心、广东省人力资源管理协会、香港工业总会、中山大学、浙江大学等100多家培训公司、行业协会、有关机构的签约讲师、特聘顾问。
讲师擅长:
钟老师精通劳动政策法律法规和劳动仲裁、诉讼程序,擅长劳动用工风险的有效预防与劳动争议案件的精准应对,善于把劳动法律法规与企业人力资源管理有机整合,通晓企业劳动争议防范机制的构建和劳动用工管理体系的修正完善。钟老师经常在客户办公现场、培训现场为客户、学员即时起草、审查、修改相关制度、合同、文书,或分析具体案件的应对思路;钟老师独到的现场的专业功底,每次都赢得广大客户、学员发自内心的好评与100%的信服!
讲师经历:
钟老师曾任专职劳动仲裁员,曾获“广州市优秀劳动仲裁员”称号,期间审裁劳动争议案件400多宗;多年来累积代理劳动争议500多宗,参与或主持薪酬绩效咨询项目20多个,审查完善400多家企业的人力资源管理规章制度。个人长期担任30多家(累计200多家)企业的人力资源管理法律顾问;以钟老师领衔的专家队伍,长期为企事业单位提供劳动法常年顾问及各种劳资专项咨询服务,客户满意度高达95%。
2004年开始钟老师全国各地巡讲劳动法、劳动关系课程,受益企业达30000家,直接受益学员70000多人,培训地点涉及20多个省会城市及沿海地区大城市。钟老师将枯燥的劳动政策法规溶入实际管理案例当中,将人力资源管理与劳动法有机地整合在一起;课程内容80%为真实案例、20%为必备的重点法条;学员参与讨论、互动,课程生动有趣,深入浅出,实战型超强,让学员即时学以致用!课程满意度高达95%,众多学员均表示:“第一次听到如此实战、
实用、实效的劳动法课程!钟老师非常务实、不说教、没有商业味道,终于听到了让我不再后悔的精彩课程!”
钟老师先后在《广州日报》、《南方都市报》、《中国社会科学报》、《人力资源》、《香港工业总会月刊》等报刊、杂志、媒体发表专业文章或采访稿50多篇。
6 years, 8 months