Merge "Replace assert statements in tests"
[yardstick.git] / docs / testing / developer / devguide / devguide_nsb_prox.rst
1 Introduction
2 =============
3
4 This document describes the steps to create a new NSB PROX test based on
5 existing PROX functionalities. NSB PROX provides is a simple approximation
6 of an operation and can be used to develop best practices and TCO models
7 for Telco customers, investigate the impact of new Intel compute,
8 network and storage technologies, characterize performance, and develop
9 optimal system architectures and configurations.
10
11 .. contents::
12
13 Prerequisites
14 =============
15
16 In order to integrate PROX tests into NSB, the following prerequisites are required.
17
18 .. _`dpdk wiki page`: http://dpdk.org/
19 .. _`yardstick wiki page`: https://wiki.opnfv.org/display/yardstick/
20 .. _`Prox documentation`: https://01.org/intel-data-plane-performance-demonstrators/documentation/prox-documentation
21 .. _`openstack wiki page`: https://wiki.openstack.org/wiki/Main_Page
22 .. _`grafana getting started`: http://docs.grafana.org/guides/gettingstarted/
23 .. _`opnfv grafana dashboard`: https://wiki.opnfv.org/display/yardstick/How+to+work+with+grafana+dashboard
24 .. _`Prox command line`: https://01.org/intel-data-plane-performance-demonstrators/documentation/prox-documentation#Command_line_options
25 .. _`grafana deployment`: https://wiki.opnfv.org/display/yardstick/How+to+deploy+InfluxDB+and+Grafana+locally
26 .. _`Prox options`: https://01.org/intel-data-plane-performance-demonstrators/documentation/prox-documentation#.5Beal_options.5D
27 .. _`NSB Installation`: http://artifacts.opnfv.org/yardstick/docs/userguide/index.html#document-09-installation
28
29 * A working knowledge of Yardstick. See `yardstick wiki page`_.
30 * A working knowledge of PROX. See `Prox documentation`_.
31 * Knowledge of Openstack. See `openstack wiki page`_.
32 * Knowledge of how to use Grafana. See `grafana getting started`_.
33 * How to Deploy InfluxDB & Grafana. See `grafana deployment`_.
34 * How to use Grafana in OPNFV/Yardstick. See `opnfv grafana dashboard`_.
35 * How to install NSB. See `NSB Installation`_
36
37 Sample Prox Test Hardware Architecture
38 ======================================
39
40 The following is a diagram of a sample NSB PROX Hardware Architecture
41 for both NSB PROX on Bare metal and on Openstack.
42
43 In this example when running yardstick on baremetal, yardstick will
44 run on the deployment node, the generator will run on the deployment node
45 and the SUT(SUT) will run on the Controller Node.
46
47
48 .. image:: images/PROX_Hardware_Arch.png
49    :width: 800px
50    :alt: Sample NSB PROX Hard Architecture
51
52 Prox Test Architecture
53 ======================
54
55 In order to create a new test, one must understand the architecture of
56 the test.
57
58 A NSB Prox test architecture is composed of:
59
60 * A traffic generator. This provides blocks of data on 1 or more ports
61   to the SUT.
62   The traffic generator also consumes the result packets from the system
63   under test.
64 * A SUT consumes the packets generated by the packet
65   generator, and applies one or more tasks to the packets and return the
66   modified packets to the traffic generator.
67
68   This is an example of a sample NSB PROX test architecture.
69
70 .. image:: images/PROX_Software_Arch.png
71    :width: 800px
72    :alt: NSB PROX test Architecture
73
74 This diagram is of a sample NSB PROX test application.
75
76 * Traffic Generator
77
78   * Generator Tasks - Composted of 1 or more tasks (It is possible to
79     have multiple tasks sending packets to same port No. See Tasks Ai and Aii
80     plus Di and Dii)
81
82     * Task Ai - Generates Packets on Port 0 of Traffic Generator
83       and send to Port 0 of SUT Port 0
84     * Task Aii - Generates Packets on Port 0 of Traffic Generator
85       and send to Port 0 of SUT Port 0
86     * Task B - Generates Packets on Port 1 of Traffic Generator
87       and send to Port 1 of SUT Port 1
88     * Task C - Generates Packets on Port 2 of Traffic Generator
89       and send to Port 2 of SUT Port 2
90     * Task Di - Generates Packets on Port 3 of Traffic Generator
91       and send to Port 3 of SUT Port 3
92     * Task Dii - Generates Packets on Port 0 of Traffic Generator
93       and send to Port 0 of SUT Port 0
94
95   * Verifier Tasks - Composed of 1 or more tasks which receives
96     packets from SUT
97
98     * Task E - Receives packets on Port 0 of Traffic Generator sent
99       from Port 0 of SUT Port 0
100     * Task F - Receives packets on Port 1 of Traffic Generator sent
101       from Port 1 of SUT Port 1
102     * Task G - Receives packets on Port 2 of Traffic Generator sent
103       from Port 2 of SUT Port 2
104     * Task H - Receives packets on Port 3 of Traffic Generator sent
105       from Port 3 of SUT Port 3
106
107 * SUT
108
109   * Receiver Tasks - Receives packets from generator - Composed on 1 or
110     more tasks which consume the packs sent from Traffic Generator
111
112     * Task A - Receives Packets on Port 0 of System-Under-Test from
113       Traffic Generator Port 0, and forwards packets to Task E
114     * Task B - Receives Packets on Port 1 of System-Under-Test from
115       Traffic Generator Port 1, and forwards packets to Task E
116     * Task C - Receives Packets on Port 2 of System-Under-Test from
117       Traffic Generator Port 2, and forwards packets to Task E
118     * Task D - Receives Packets on Port 3 of System-Under-Test from
119       Traffic Generator Port 3, and forwards packets to Task E
120
121   * Processing Tasks - Composed of multiple tasks in series which carry
122     out some processing on received packets before forwarding to the
123     task.
124
125     * Task E - This receives packets from the Receiver Tasks,
126       carries out some operation on the data and forwards to result
127       packets to the next task in the sequence - Task F
128     * Task F - This receives packets from the previous Task - Task
129       E, carries out some operation on the data and forwards to result
130       packets to the next task in the sequence - Task G
131     * Task G - This receives packets from the previous Task - Task F
132       and distributes the result packages to the Transmitter tasks
133
134   * Transmitter Tasks - Composed on 1 or more tasks which send the
135     processed packets back to the Traffic Generator
136
137     * Task H - Receives Packets from Task G of System-Under-Test and
138       sends packets to Traffic Generator Port 0
139     * Task I - Receives Packets from Task G of System-Under-Test and
140       sends packets to Traffic Generator Port 1
141     * Task J - Receives Packets from Task G of System-Under-Test and
142       sends packets to Traffic Generator Port 2
143     * Task K - Receives Packets From Task G of System-Under-Test and
144       sends packets to Traffic Generator Port 3
145
146 NSB Prox Test
147 =============
148
149 A NSB Prox test is composed of the following components :-
150
151 * Test Description File. Usually called
152   ``tc_prox_<context>_<test>-<ports>.yaml`` where
153
154   * <context> is either ``baremetal`` or ``heat_context``
155   * <test> is the a one or 2 word description of the test.
156   * <ports> is the number of ports used
157
158   Example tests ``tc_prox_baremetal_l2fwd-2.yaml`` or
159   ``tc_prox_heat_context_vpe-4.yaml``. This file describes the components
160   of the test, in the case of openstack the network description and
161   server descriptions, in the case of baremetal the hardware
162   description location. It also contains the name of the Traffic Generator, the SUT config file
163   and the traffic profile description, all described below. See nsb-test-description-label_
164
165 * Traffic Profile file. Example ``prox_binsearch.yaml``. This describes the packet size, tolerated
166   loss, initial line rate to start traffic at, test interval etc See nsb-traffic-profile-label_
167
168 * Traffic Generator Config file. Usually called ``gen_<test>-<ports>.cfg``.
169
170   This describes the activity of the traffic generator
171
172   * What each core of the traffic generator does,
173   * The packet of data sent by a core on a port of the traffic generator
174     to the system under test
175   * What core is used to wait on what port for data from the system
176     under test.
177
178   Example traffic generator config file  ``gen_l2fwd-4.cfg``
179   See nsb-traffic-generator-label_
180
181 * SUT Config file. Usually called ``handle_<test>-<ports>.cfg``.
182
183   This describes the activity of the SUTs
184
185   * What each core of the  does,
186   * What cores receives packets from what ports
187   * What cores perform operations on the packets and pass the packets onto
188     another core
189   * What cores receives packets from what cores and transmit the packets on
190     the ports to the Traffic Verifier tasks of the Traffic Generator.
191
192   Example traffic generator config file  ``handle_l2fwd-4.cfg``
193   See nsb-sut-generator-label_
194
195 * NSB PROX Baremetal Configuration file. Usually called
196   ``prox-baremetal-<ports>.yaml``
197
198   * <ports> is the number of ports used
199
200   This is required for baremetal only.  This describes hardware, NICs,
201   IP addresses, Network drivers, usernames and passwords.
202   See baremetal-config-label_
203
204 * Grafana Dashboard. Usually called
205   ``Prox_<context>_<test>-<port>-<DateAndTime>.json`` where
206
207   * <context> Is either ``BM`` or ``heat``
208   * <test> Is the a one or 2 word description of the test.
209   * <port> is the number of ports used express as ``2Port`` or ``4Port``
210   * <DateAndTime> is the Date and Time expressed as a string.
211
212   Example grafana dashboard ``Prox_BM_L2FWD-4Port-1507804504588.json``
213
214 Other files may be required. These are test specific files and will be
215 covered later.
216
217 .. _nsb-test-description-label:
218
219 **Test Description File**
220
221 Here we will discuss the test description for both
222 baremetal and openstack.
223
224 *Test Description File for Baremetal*
225 -------------------------------------
226
227 This section will introduce the meaning of the Test case description
228 file. We will use ``tc_prox_baremetal_l2fwd-2.yaml`` as an example to
229 show you how to understand the test description file.
230
231 .. image:: images/PROX_Test_BM_Script.png
232    :width: 800px
233    :alt: NSB PROX Test Description File
234
235 Now let's examine the components of the file in detail
236
237 1. ``traffic_profile`` - This specifies the traffic profile for the
238    test. In this case ``prox_binsearch.yaml`` is used. See nsb-traffic-profile-label_
239
240 2. ``topology`` - This is either ``prox-tg-topology-1.yaml`` or
241     ``prox-tg-topology-2.yaml`` or ``prox-tg-topology-4.yaml``
242     depending on number of ports required.
243
244 3. ``nodes`` - This names the Traffic Generator and the System
245    under Test. Does not need to change.
246
247 4. ``prox_path`` - Location of the Prox executable on the traffic
248    generator (Either baremetal or Openstack Virtual Machine)
249
250 5. ``prox_config`` - This is the ``SUT Config File``.
251    In this case it is ``handle_l2fwd-2.cfg``
252
253    A number of additional parameters can be added. This example
254    is for VPE::
255
256     options:
257       interface_speed_gbps: 10
258
259       vnf__0:
260         prox_path: /opt/nsb_bin/prox
261         prox_config: ``configs/handle_vpe-4.cfg``
262         prox_args:
263           ``-t``: ````
264         prox_files:
265           ``configs/vpe_ipv4.lua`` : ````
266           ``configs/vpe_dscp.lua`` : ````
267           ``configs/vpe_cpe_table.lua`` : ````
268           ``configs/vpe_user_table.lua`` : ````
269           ``configs/vpe_rules.lua`` : ````
270         prox_generate_parameter: True
271
272    ``interface_speed_gbps`` - this specifies the speed of the interface
273    in Gigabits Per Second. This is used to calculate pps(packets per second).
274    If the interfaces are of different speeds, then this specifies the speed
275    of the slowest interface. This parameter is optional. If omitted the
276    interface speed defaults to 10Gbps.
277
278    ``prox_files`` - this specified that a number of addition files
279    need to be provided for the test to run correctly. This files
280    could provide routing information,hashing information or a
281    hashing algorithm and ip/mac information.
282
283    ``prox_generate_parameter`` - this specifies that the NSB application
284    is required to provide information to the nsb Prox in the form
285    of a file called ``parameters.lua``, which contains information
286    retrieved from either the hardware or the openstack configuration.
287
288 6. ``prox_args`` - this specifies the command line arguments to start
289    prox. See `prox command line`_.
290
291 7. ``prox_config`` - This specifies the Traffic Generator config file.
292
293 8. ``runner`` - This is set to ``Duration`` - This specified that the
294    test run for a set duration. Other runner types are available
295    but it is recommend to use ``Duration``
296
297 9. ``context`` - This is ``context`` for a 2 port Baremetal configuration.
298    If a 4 port configuration was required then file
299    ``prox-baremetal-4.yaml`` would be used. This is the NSB Prox
300    baremetal configuration file.
301
302 .. _nsb-traffic-profile-label:
303
304 *Traffic Profile file*
305 ----------------------
306
307 This describes the details of the traffic flow. In this case ``prox_binsearch.yaml`` is used.
308
309 .. image:: images/PROX_Traffic_profile.png
310    :width: 800px
311    :alt: NSB PROX Traffic Profile
312
313
314 1. ``name`` - The name of the traffic profile. This name should match the name specified in the
315    ``traffic_profile`` field in the Test Description File.
316
317 2. ``traffic_type`` - This specifies the type of traffic pattern generated, This name matches
318    class name of the traffic generator See::
319
320       network_services/traffic_profile/prox_binsearch.py class ProxBinSearchProfile(ProxProfile)
321
322    In this case it lowers the traffic rate until the number of packets
323    sent is equal to the number of packets received (plus a
324    tolerated loss). Once it achieves this it increases the traffic
325    rate in order to find the highest rate with no traffic loss.
326
327    Custom traffic types can be created by creating a new traffic profile class.
328
329 3. ``tolerated_loss`` - This specifies the percentage of packets that can be lost/dropped before
330    we declare success or failure. Success is Transmitted-Packets from Traffic Generator is greater than or equal to
331    packets received by Traffic Generator plus tolerated loss.
332
333 4. ``test_precision`` - This specifies the precision of the test results. For some tests the success criteria
334    may never be achieved because the test precision may be greater than the successful throughput. For finer
335    results increase the precision by making this value smaller.
336
337 5. ``packet_sizes`` - This specifies the range of packets size this test is run for.
338
339 6. ``duration`` - This specifies the sample duration that the test uses to check for success or failure.
340
341 7. ``lower_bound`` - This specifies the test initial lower bound sample rate. On success this value is increased.
342
343 8. ``upper_bound`` - This specifies the test initial upper bound sample rate. On success this value is decreased.
344
345 Other traffic profiles exist eg prox_ACL.yaml which does not
346 compare what is received with what is transmitted. It just
347 sends packet at max rate.
348
349 It is possible to create custom traffic profiles with by
350 creating new file in the same folder as prox_binsearch.yaml.
351 See this prox_vpe.yaml as example::
352
353      schema: ``nsb:traffic_profile:0.1``
354
355      name:            prox_vpe
356      description:     Prox vPE traffic profile
357
358      traffic_profile:
359        traffic_type: ProxBinSearchProfile
360        tolerated_loss: 100.0 #0.001
361        test_precision: 0.01
362      # The minimum size of the Ethernet frame for the vPE test is 68 bytes.
363        packet_sizes: [68]
364        duration: 5
365        lower_bound: 0.0
366        upper_bound: 100.0
367
368 *Test Description File for Openstack*
369 -------------------------------------
370
371 We will use ``tc_prox_heat_context_l2fwd-2.yaml`` as a example to show
372 you how to understand the test description file.
373
374 .. image:: images/PROX_Test_HEAT_Script.png
375    :width: 800px
376    :alt: NSB PROX Test Description File
377
378 Now lets examine the components of the file in detail
379
380 Sections 1 to 8 are exactly the same in Baremetal and in Heat. Section
381 ``9`` is replaced with sections A to F. Section 9 was for a baremetal
382 configuration file. This has no place in a heat configuration.
383
384 A. ``image`` - yardstick-samplevnfs. This is the name of the image
385    created during the installation of NSB. This is fixed.
386
387 B. ``flavor`` - The flavor is created dynamically. However we could
388    use an already existing flavor if required. In that case the
389    flavor would be named::
390
391     flavor: yardstick-flavor
392
393 C. ``extra_specs`` - This allows us to specify the number of
394    cores sockets and hyperthreading assigned to it. In this case
395    we have 1 socket with 10 codes and no hyperthreading enabled.
396
397 D. ``placement_groups`` - default. Do not change for NSB PROX.
398
399 E. ``servers`` - ``tg_0`` is the traffic generator and ``vnf_0``
400    is the system under test.
401
402 F. ``networks`` - is composed of a management network labeled ``mgmt``
403    and one uplink network labeled ``uplink_0``  and one downlink
404    network labeled ``downlink_0`` for 2 ports. If this was a 4 port
405    configuration there would be 2 extra downlink ports. See this
406    example from a 4 port l2fwd test.::
407
408     networks:
409       mgmt:
410         cidr: '10.0.1.0/24'
411       uplink_0:
412         cidr: '10.0.2.0/24'
413         gateway_ip: 'null'
414         port_security_enabled: False
415         enable_dhcp: 'false'
416       downlink_0:
417         cidr: '10.0.3.0/24'
418         gateway_ip: 'null'
419         port_security_enabled: False
420         enable_dhcp: 'false'
421       downlink_1:
422         cidr: '10.0.4.0/24'
423         gateway_ip: 'null'
424         port_security_enabled: False
425         enable_dhcp: 'false'
426       downlink_2:
427         cidr: '10.0.5.0/24'
428         gateway_ip: 'null'
429         port_security_enabled: False
430         enable_dhcp: 'false'
431
432 .. _nsb-traffic-generator-label:
433
434 *Traffic Generator Config file*
435 -------------------------------
436
437 This section will describe the traffic generator config file.
438 This is the same for both baremetal and heat. See this example
439 of ``gen_l2fwd_multiflow-2.cfg`` to explain the options.
440
441 .. image:: images/PROX_Gen_2port_cfg.png
442    :width: 1400px
443    :alt: NSB PROX Gen Config File
444
445 The configuration file is divided into multiple sections, each
446 of which is used to define some parameters and options.::
447
448   [eal options]
449   [variables]
450   [port 0]
451   [port 1]
452   [port .]
453   [port Z]
454   [defaults]
455   [global]
456   [core 0]
457   [core 1]
458   [core 2]
459   [core .]
460   [core Z]
461
462 See `prox options`_ for details
463
464 Now let's examine the components of the file in detail
465
466 1. ``[eal options]`` - This specified the EAL (Environmental
467    Abstraction Layer) options. These are default values and
468    are not changed. See `dpdk wiki page`_.
469
470 2. ``[variables]`` - This section contains variables, as
471    the name suggests. Variables for Core numbers, mac
472    addresses, ip addresses etc. They are assigned as a
473    ``key = value`` where the key is used in place of the value.
474
475    .. caution::
476      A special case for valuables with a value beginning with
477      ``@@``. These values are dynamically updated by the NSB
478      application at run time. Values like MAC address,
479      IP Address etc.
480
481 3. ``[port 0]`` - This section describes the DPDK Port. The number
482    following the keyword ``port`` usually refers to the DPDK Port
483    Id. usually starting from ``0``. Because you can have multiple
484    ports this entry usually repeated. Eg. For a 2 port setup
485    ``[port0]`` and ``[port 1]`` and for a 4 port setup ``[port 0]``,
486    ``[port 1]``, ``[port 2]`` and ``[port 3]``::
487
488       [port 0]
489       name=p0
490       mac=hardware
491       rx desc=2048
492       tx desc=2048
493       promiscuous=yes
494
495    a. In this example ``name = p0`` assigned the name ``p0`` to the
496       port. Any name can be assigned to a port.
497    b. ``mac=hardware`` sets the MAC address assigned by the hardware
498       to data from this port.
499    c. ``rx desc=2048`` sets the number of available descriptors to
500       allocate for receive packets. This can be changed and can
501       effect performance.
502    d. ``tx desc=2048`` sets the number of available descriptors to
503       allocate for transmit packets. This can be changed and can
504       effect performance.
505    e. ``promiscuous=yes`` this enables promiscuous mode for this port.
506
507 4. ``[defaults]`` - Here default operations and settings can be over
508    written. In this example ``mempool size=4K`` the number of mbufs
509    per task is altered. Altering this value could effect
510    performance. See `prox options`_ for details.
511
512 5. ``[global]`` - Here application wide setting are supported. Things
513    like application name, start time, duration and memory
514    configurations can be set here. In this example.::
515
516       [global]
517       start time=5
518       name=Basic Gen
519
520     a. ``start time=5`` Time is seconds after which average
521        stats will be started.
522     b. ``name=Basic Gen`` Name of the configuration.
523
524 6. ``[core 0]`` - This core is designated the master core. Every
525    Prox application must have a master core. The master mode must
526    be assigned to exactly one task, running alone on one core.::
527
528     [core 0]
529     mode=master
530
531 7. ``[core 1]`` - This describes the activity on core 1. Cores can
532    be configured by means of a set of [core #] sections, where
533    # represents either:
534
535    a. an absolute core number: e.g. on a 10-core, dual socket
536       system with hyper-threading,
537       cores are numbered from 0 to 39.
538
539    b. PROX allows a core to be identified by a core number, the
540       letter 's', and a socket number.
541
542       It is possible to write a baremetal and an openstack test which use
543       the same traffic generator config file and SUT config file.
544       In this case it is advisable not to use physical
545       core numbering.
546
547       However it is also possible to write NSB Prox tests that
548       have been optimized for a particular hardware configuration.
549       In this case it is advisable to use the core numbering.
550       It is up to the user to make sure that cores from
551       the right sockets are used (i.e. from the socket on which the NIC
552       is attached to), to ensure good performance (EPA).
553
554    Each core can be assigned with a set of tasks, each running
555    one of the implemented packet processing modes.::
556
557      [core 1]
558      name=p0
559      task=0
560      mode=gen
561      tx port=p0
562      bps=1250000000
563      ; Ethernet + IP + UDP
564      pkt inline=${sut_mac0} 70 00 00 00 00 01 08 00 45 00 00 1c 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 08 55 7b
565      ; src_ip: 152.16.100.0/8
566      random=0000XXX1
567      rand_offset=29
568      ; dst_ip: 152.16.100.0/8
569      random=0000XXX0
570      rand_offset=33
571      random=0001001110001XXX0001001110001XXX
572      rand_offset=34
573
574    a. ``name=p0`` - Name assigned to the core.
575    b. ``task=0`` - Each core can run a set of tasks. Starting with ``0``.
576       Task 1 can be defined later in this core or
577       can be defined in another ``[core 1]`` section with ``task=1``
578       later in configuration file. Sometimes running
579       multiple task related to the same packet on the same physical
580       core improves performance, however sometimes it
581       is optimal to move task to a separate core. This is best
582       decided by checking performance.
583    c. ``mode=gen`` - Specifies the action carried out by this task on
584       this core. Supported modes are: classify, drop, gen, lat, genl4, nop, l2fwd, gredecap,
585       greencap, lbpos, lbnetwork, lbqinq, lb5tuple, ipv6_decap, ipv6_encap,
586       qinqdecapv4, qinqencapv4, qos, routing, impair,
587       mirror, unmpls, tagmpls, nat, decapnsh, encapnsh, police, acl
588       Which are :-
589
590        * Classify
591        * Drop
592        * Basic Forwarding (no touch)
593        * L2 Forwarding (change MAC)
594        * GRE encap/decap
595        * Load balance based on packet fields
596        * Symmetric load balancing
597        * QinQ encap/decap IPv4/IPv6
598        * ARP
599        * QoS
600        * Routing
601        * Unmpls
602        * Nsh encap/decap
603        * Policing
604        * ACL
605
606       In the traffic generator we expect a core to generate packets (``gen``)
607       and to receive packets & calculate latency (``lat``)
608       This core does ``gen`` . ie it is a traffic generator.
609
610       To understand what each of the modes support please see
611       `prox documentation`_.
612
613    d. ``tx port=p0`` - This specifies that the packets generated are
614       transmitted to port ``p0``
615    e. ``bps=1250000000`` - This indicates Bytes Per Second to
616       generate packets.
617    f. ``; Ethernet + IP + UDP`` - This is a comment. Items starting with
618       ``;`` are ignored.
619    g. ``pkt inline=${sut_mac0} 70 00 00 00 ...`` - Defines the packet
620       format as a sequence of bytes (each
621       expressed in hexadecimal notation). This defines the packet
622       that is generated. This packets begins
623       with the hexadecimal sequence assigned to ``sut_mac`` and the
624       remainder of the bytes in the string.
625       This packet could now be sent or modified by ``random=..``
626       described below before being sent to target.
627    h. ``; src_ip: 152.16.100.0/8`` - Comment
628    i. ``random=0000XXX1`` - This describes a field of the packet
629       containing random data. This string can be
630       8,16,24 or 32 character long and represents 1,2,3 or 4
631       bytes of data. In this case it describes a byte of
632       data. Each character in string can be 0,1 or ``X``. 0 or 1
633       are fixed bit values in the data packet and ``X`` is a
634       random bit. So random=0000XXX1 generates 00000001(1),
635       00000011(3), 00000101(5), 00000111(7),
636       00001001(9), 00001011(11), 00001101(13) and 00001111(15)
637       combinations.
638    j. ``rand_offset=29`` - Defines where to place the previously
639       defined random field.
640    k. ``; dst_ip: 152.16.100.0/8`` - Comment
641    l. ``random=0000XXX0`` - This is another random field which
642       generates a byte of 00000000(0), 00000010(2),
643       00000100(4), 00000110(6), 00001000(8), 00001010(10),
644       00001100(12) and 00001110(14) combinations.
645    m. ``rand_offset=33`` - Defines where to place the previously
646       defined random field.
647    n. ``random=0001001110001XXX0001001110001XXX`` - This is
648       another random field which generates 4 bytes.
649    o. ``rand_offset=34`` - Defines where to place the previously
650       defined 4 byte random field.
651
652    Core 2 executes same scenario as Core 1. The only difference
653    in this case is that the packets are generated
654    for Port 1.
655
656 8. ``[core 3]`` - This defines the activities on core 3. The purpose
657    of ``core 3`` and ``core 4`` is to receive packets
658    sent by the SUT.::
659
660      [core 3]
661      name=rec 0
662      task=0
663      mode=lat
664      rx port=p0
665      lat pos=42
666
667    a. ``name=rec 0`` - Name assigned to the core.
668    b. ``task=0`` - Each core can run a set of tasks. Starting with
669       ``0``. Task 1 can be defined later in this core or
670       can be defined in another ``[core 1]`` section with
671       ``task=1`` later in configuration file. Sometimes running
672       multiple task related to the same packet on the same
673       physical core improves performance, however sometimes it
674       is optimal to move task to a separate core. This is
675       best decided by checking performance.
676    c. ``mode=lat`` - Specifies the action carried out by this task on this core. Supported modes are: acl,
677       classify, drop, gredecap, greencap, ipv6_decap, ipv6_encap, l2fwd, lbnetwork, lbpos, lbqinq, nop,
678       police, qinqdecapv4, qinqencapv4, qos, routing, impair, lb5tuple, mirror, unmpls, tagmpls,
679       nat, decapnsh, encapnsh, gen, genl4 and lat. This task(0) per core(3) receives packets on port.
680    d. ``rx port=p0`` - The port to receive packets on ``Port 0``. Core 4 will receive packets on ``Port 1``.
681    e. ``lat pos=42`` - Describes where to put a 4-byte timestamp in the packet. Note that the packet length should
682       be longer than ``lat pos`` + 4 bytes to avoid truncation of the timestamp. It defines where the timestamp is
683       to be read from. Note that the SUT workload might cause the position of the timestamp to change
684       (i.e. due to encapsulation).
685
686 .. _nsb-sut-generator-label:
687
688 *SUT Config file*
689 -------------------------------
690
691 This section will describes the SUT(VNF) config file. This is the same for both
692 baremetal and heat. See this example of ``handle_l2fwd_multiflow-2.cfg`` to explain the options.
693
694 .. image:: images/PROX_Handle_2port_cfg.png
695    :width: 1400px
696    :alt: NSB PROX Handle Config File
697
698 See `prox options`_ for details
699
700 Now let's examine the components of the file in detail
701
702 1. ``[eal options]`` - same as the Generator config file. This specified the EAL (Environmental Abstraction Layer)
703    options. These are default values and are not changed.
704    See `dpdk wiki page`_.
705
706 2. ``[port 0]`` - This section describes the DPDK Port. The number following the keyword ``port`` usually refers to the DPDK Port Id. usually starting from ``0``.
707    Because you can have multiple ports this entry usually repeated. Eg. For a 2 port setup ``[port0]`` and ``[port 1]`` and for a 4 port setup ``[port 0]``, ``[port 1]``,
708    ``[port 2]`` and ``[port 3]``::
709
710       [port 0]
711       name=if0
712       mac=hardware
713       rx desc=2048
714       tx desc=2048
715       promiscuous=yes
716
717    a. In this example ``name =if0`` assigned the name ``if0`` to the port. Any name can be assigned to a port.
718    b. ``mac=hardware`` sets the MAC address assigned by the hardware to data from this port.
719    c. ``rx desc=2048`` sets the number of available descriptors to allocate for receive packets. This can be changed and can effect performance.
720    d. ``tx desc=2048`` sets the number of available descriptors to allocate for transmit packets. This can be changed and can effect performance.
721    e. ``promiscuous=yes`` this enables promiscuous mode for this port.
722
723 3. ``[defaults]`` - Here default operations and settings can be over written.::
724
725      [defaults]
726      mempool size=8K
727      memcache size=512
728
729    a. In this example ``mempool size=8K`` the number of mbufs per task is altered. Altering this value could effect performance. See `prox options`_ for details.
730    b. ``memcache size=512`` - number of mbufs cached per core, default is 256 this is the cache_size. Altering this value could effect performance.
731
732 4. ``[global]`` - Here application wide setting are supported. Things like application name, start time, duration and memory configurations can be set here.
733    In this example.::
734
735       [global]
736       start time=5
737       name=Basic Gen
738
739     a. ``start time=5`` Time is seconds after which average stats will be started.
740     b. ``name=Handle L2FWD Multiflow (2x)`` Name of the configuration.
741
742 5. ``[core 0]`` - This core is designated the master core. Every Prox application must have a master core. The master mode must be assigned to
743    exactly one task, running alone on one core.::
744
745     [core 0]
746     mode=master
747
748 6. ``[core 1]`` - This describes the activity on core 1. Cores can be configured by means of a set of [core #] sections,   where # represents either:
749
750    a. an absolute core number: e.g. on a 10-core, dual socket system with hyper-threading,
751       cores are numbered from 0 to 39.
752
753    b. PROX allows a core to be identified by a core number, the letter 's', and a socket number.
754       However NSB PROX is hardware agnostic (physical and virtual configurations are the same) it
755       is advisable no to use physical core numbering.
756
757    Each core can be assigned with a set of tasks, each running one of the implemented packet processing modes.::
758
759      [core 1]
760      name=none
761      task=0
762      mode=l2fwd
763      dst mac=@@tester_mac1
764      rx port=if0
765      tx port=if1
766
767    a. ``name=none`` - No name assigned to the core.
768    b. ``task=0`` - Each core can run a set of tasks. Starting with ``0``. Task 1 can be defined later in this core or
769       can be defined in another ``[core 1]`` section with ``task=1`` later in configuration file. Sometimes running
770       multiple task related to the same packet on the same physical core improves performance, however sometimes it
771       is optimal to move task to a separate core. This is best decided by checking performance.
772    c. ``mode=l2fwd`` - Specifies the action carried out by this task on this core. Supported modes are: acl,
773       classify, drop, gredecap, greencap, ipv6_decap, ipv6_encap, l2fwd, lbnetwork, lbpos, lbqinq, nop,
774       police, qinqdecapv4, qinqencapv4, qos, routing, impair, lb5tuple, mirror, unmpls, tagmpls,
775       nat, decapnsh, encapnsh, gen, genl4 and lat. This code does ``l2fwd`` .. ie it does the L2FWD.
776
777    d. ``dst mac=@@tester_mac1`` - The destination mac address of the packet will be set to the MAC address of ``Port 1`` of destination device. (The Traffic Generator/Verifier)
778    e. ``rx port=if0`` - This specifies that the packets are received from ``Port 0`` called if0
779    f. ``tx port=if1`` - This specifies that the packets are transmitted to ``Port 1``  called if1
780
781    If this example we receive a packet on core on a port, carry out operation on the packet on the core and transmit it on on another port still using the same task on the same core.
782
783    On some implementation you may wish to use multiple tasks, like this.::
784
785      [core 1]
786      name=rx_task
787      task=0
788      mode=l2fwd
789      dst mac=@@tester_p0
790      rx port=if0
791      tx cores=1t1
792      drop=no
793
794      name=l2fwd_if0
795      task=1
796      mode=nop
797      rx ring=yes
798      tx port=if0
799      drop=no
800
801    In this example you can see Core 1/Task 0 called ``rx_task`` receives the packet from if0 and perform the l2fwd. However instead of sending the packet to a
802    port it sends it to a core see ``tx cores=1t1``. In this case it sends it to Core 1/Task 1.
803
804    Core 1/Task 1 called ``l2fwd_if0``, receives the packet, not from a port but from the ring. See ``rx ring=yes``. It does not perform any operation on the packet See ``mode=none``
805    and sends the packets to ``if0`` see ``tx port=if0``.
806
807    It is also possible to implement more complex operations be chaining multiple operations in sequence and using rings to pass packets from one core to another.
808
809    In thus example we show a Broadband Network Gateway (BNG) with Quality of Service (QoS).  Communication from task to task is via rings.
810
811    .. image:: images/PROX_BNG_QOS.png
812       :width: 1000px
813       :alt: NSB PROX Config File for BNG_QOS
814
815 *Baremetal Configuration file*
816 ------------------------------
817
818 .. _baremetal-config-label:
819
820 This is required for baremetal testing. It describes the IP address of the various ports, the Network devices drivers and MAC addresses and the network
821 configuration.
822
823 In this example we will describe a 2 port configuration. This file is the same for all 2 port NSB Prox tests on the same platforms/configuration.
824
825   .. image:: images/PROX_Baremetal_config.png
826      :width: 1000px
827      :alt: NSB PROX Yardstick Config
828
829 Now lets describe the sections of the file.
830
831   1. ``TrafficGen`` - This section describes the Traffic Generator node of the test configuration. The name of the node ``trafficgen_1`` must match the node name
832      in the ``Test Description File for Baremetal`` mentioned earlier. The password attribute of the test needs to be configured. All other parameters
833      can remain as default settings.
834   2. ``interfaces`` - This defines the DPDK interfaces on the Traffic Generator.
835   3. ``xe0`` is DPDK Port 0. ``lspci`` and `` ./dpdk-devbind.py -s`` can be used to provide the interface information. ``netmask`` and ``local_ip`` should not be changed
836   4. ``xe1`` is DPDK Port 1. If more than 2 ports are required then ``xe1`` section needs to be repeated and modified accordingly.
837   5. ``vnf`` - This section describes the SUT of the test configuration. The name of the node ``vnf`` must match the node name in the
838      ``Test Description File for Baremetal`` mentioned earlier. The password attribute of the test needs to be configured. All other parameters
839      can remain as default settings
840   6. ``interfaces`` - This defines the DPDK interfaces on the SUT
841   7. ``xe0`` - Same as 3 but for the ``SUT``.
842   8. ``xe1`` - Same as 4 but for the ``SUT`` also.
843   9. ``routing_table`` - All parameters should remain unchanged.
844   10. ``nd_route_tbl`` - All parameters should remain unchanged.
845
846 *Grafana Dashboard*
847 -------------------
848
849 The grafana dashboard visually displays the results of the tests. The steps required to produce a grafana dashboard are described here.
850
851 .. _yardstick-config-label:
852
853   a. Configure ``yardstick`` to use influxDB to store test results. See file ``/etc/yardstick/yardstick.conf``.
854
855      .. image:: images/PROX_Yardstick_config.png
856         :width: 1000px
857         :alt: NSB PROX Yardstick Config
858
859      1. Specify the dispatcher to use influxDB to store results.
860      2. "target = .. " - Specify location of influxDB to store results.
861         "db_name = yardstick" - name of database. Do not change
862         "username = root" - username to use to store result. (Many tests are run as root)
863         "password = ... " - Please set to root user password
864
865   b. Deploy InfludDB & Grafana. See how to Deploy InfluxDB & Grafana. See `grafana deployment`_.
866   c. Generate the test data. Run the tests as follows .::
867
868        yardstick --debug task start tc_prox_<context>_<test>-ports.yaml
869
870      eg.::
871
872        yardstick --debug task start tc_prox_heat_context_l2fwd-4.yaml
873
874   d. Now build the dashboard for the test you just ran. The easiest way to do this is to copy an existing dashboard and rename the
875      test and the field names. The procedure to do so is described here. See `opnfv grafana dashboard`_.
876
877 How to run NSB Prox Test on an baremetal environment
878 ====================================================
879
880 In order to run the NSB PROX test.
881
882   1. Install NSB on Traffic Generator node and Prox in SUT. See `NSB Installation`_
883
884   2. To enter container::
885
886        docker exec -it yardstick /bin/bash
887
888   3. Install baremetal configuration file (POD files)
889
890      a. Go to location of PROX tests in container ::
891
892           cd /home/opnfv/repos/yardstick/samples/vnf_samples/nsut/prox
893
894      b. Install prox-baremetal-2.yam and prox-baremetal-4.yaml for that topology
895         into this directory as per baremetal-config-label_
896
897      c. Install and configure ``yardstick.conf`` ::
898
899             cd /etc/yardstick/
900
901         Modify /etc/yardstick/yardstick.conf as per yardstick-config-label_
902
903   4. Execute the test. Eg.::
904
905         yardstick --debug task start ./tc_prox_baremetal_l2fwd-4.yaml
906
907 How to run NSB Prox Test on an Openstack environment
908 ====================================================
909
910 In order to run the NSB PROX test.
911
912   1. Install NSB on Openstack deployment node. See  `NSB Installation`_
913
914   2. To enter container::
915
916        docker exec -it yardstick /bin/bash
917
918   3. Install configuration file
919
920      a. Goto location of PROX tests in container ::
921
922           cd /home/opnfv/repos/yardstick/samples/vnf_samples/nsut/prox
923
924      b. Install and configure ``yardstick.conf`` ::
925
926             cd /etc/yardstick/
927
928         Modify /etc/yardstick/yardstick.conf as per yardstick-config-label_
929
930
931   4. Execute the test. Eg.::
932
933         yardstick --debug task start ./tc_prox_heat_context_l2fwd-4.yaml
934
935 Frequently Asked Questions
936 ==========================
937
938 Here is a list of frequently asked questions.
939
940 *NSB Prox does not work on Baremetal, How do I resolve this?*
941 -------------------------------------------------------------
942
943 If PROX NSB does not work on baremetal, problem is either in network configuration or test file.
944
945 *Solution*
946
947 1. Verify network configuration. Execute existing baremetal test.::
948
949        yardstick --debug task start ./tc_prox_baremetal_l2fwd-4.yaml
950
951    If test does not work then error in network configuration.
952
953       a. Check DPDK on Traffic Generator and SUT via:- ::
954
955            /root/dpdk-17./usertools/dpdk-devbind.py
956
957       b. Verify MAC addresses match ``prox-baremetal-<ports>.yaml`` via ``ifconfig`` and ``dpdk-devbind``
958
959       c. Check your eth port is what you expect. You would not be the first person to think that
960          the port your cable is plugged into is ethX when in fact it is ethY. Use
961          ethtool to visually confirm that the eth is where you expect.::
962
963             ethtool -p ethX
964
965          A led should start blinking on port. (On both System-Under-Test and Traffic Generator)
966
967       d. Check cable.
968
969          Install Linux kernel network driver and ensure your ports are
970          ``bound`` to the driver via ``dpdk-devbind``. Bring up port on both
971          SUT and Traffic Generator and check connection.
972
973          i) On SUT and on Traffic Generator::
974
975               ifconfig ethX/enoX up
976
977          ii) Check link
978
979                ethtool ethX/enoX
980
981              See ``Link detected`` if ``yes`` .... Cable is good. If ``no`` you have an issue with your cable/port.
982
983 2. If existing baremetal works then issue is with your test. Check the traffic generator gen_<test>-<ports>.cfg to ensure
984    it is producing a valid packet.
985
986 *How do I debug NSB Prox on Baremetal?*
987 ---------------------------------------
988
989 *Solution*
990
991 1. Execute the test as follows::
992
993      yardstick --debug task start ./tc_prox_baremetal_l2fwd-4.yaml
994
995 2. Login to Traffic Generator as ``root``.::
996
997      cd
998      /opt/nsb_bin/prox -f /tmp/gen_<test>-<ports>.cfg
999
1000 3. Login to SUT as ``root``.::
1001
1002      cd
1003      /opt/nsb_bin/prox -f /tmp/handle_<test>-<ports>.cfg
1004
1005 4. Now let's examine the Generator Output. In this case the output of gen_l2fwd-4.cfg.
1006
1007      .. image:: images/PROX_Gen_GUI.png
1008         :width: 1000px
1009         :alt: NSB PROX Traffic Generator GUI
1010
1011    Now let's examine the output
1012
1013      1. Indicates the amount of data successfully transmitted on Port 0
1014      2. Indicates the amount of data successfully received on port 1
1015      3. Indicates the amount of data successfully handled for port 1
1016
1017    It appears what is transmitted is received.
1018
1019    .. Caution::
1020       The number of packets MAY not exactly match because the ports are read in sequence.
1021
1022    .. Caution::
1023       What is transmitted on PORT X may not always be received on same port. Please check the Test scenario.
1024
1025 5. Now lets examine the SUT Output
1026
1027      .. image:: images/PROX_SUT_GUI.png
1028         :width: 1400px
1029         :alt: NSB PROX SUT GUI
1030
1031    Now lets examine the output
1032
1033      1. What is received on 0 is transmitted on 1, received on 1 transmitted on 0,
1034         received on 2 transmitted on 3 and received on 3 transmitted on 2.
1035      2. No packets are Failed.
1036      3. No Packets are discarded.
1037
1038   We can also dump the packets being received or transmitted via the following commands. ::
1039
1040        dump                   Arguments: <core id> <task id> <nb packets>
1041                               Create a hex dump of <nb_packets> from <task_id> on <core_id> showing how
1042                               packets have changed between RX and TX.
1043        dump_rx                Arguments: <core id> <task id> <nb packets>
1044                               Create a hex dump of <nb_packets> from <task_id> on <core_id> at RX
1045        dump_tx                Arguments: <core id> <task id> <nb packets>
1046                               Create a hex dump of <nb_packets> from <task_id> on <core_id> at TX
1047
1048   eg.::
1049
1050        dump_tx 1 0 1
1051
1052 *NSB Prox works on Baremetal but not in Openstack. How do I resolve this?*
1053 --------------------------------------------------------------------------
1054
1055 NSB Prox on Baremetal is a lot more forgiving than NSB Prox on Openstack. A badly
1056 formed packed may still work with PROX on Baremetal. However on
1057 Openstack the packet must be correct and all fields of the header correct.
1058 Eg A packet with an invalid Protocol ID would still work in Baremetal
1059 but this packet would be rejected by openstack.
1060
1061 *Solution*
1062
1063  1. Check the validity of the packet.
1064  2. Use a known good packet in your test
1065  3. If using ``Random`` fields in the traffic generator, disable them and retry.
1066
1067
1068 *How do I debug NSB Prox on Openstack?*
1069 ---------------------------------------
1070
1071 *Solution*
1072
1073 1. Execute the test as follows::
1074
1075      yardstick --debug task start --keep-deploy ./tc_prox_heat_context_l2fwd-4.yaml
1076
1077 2. Access docker image if required via::
1078
1079       docker exec -it yardstick /bin/bash
1080
1081 3. Install openstack credentials.
1082
1083    Depending on your openstack deployment, the location of these credentials may vary.
1084    On this platform I do this via::
1085
1086      scp root@10.237.222.55:/etc/kolla/admin-openrc.sh .
1087      source ./admin-openrc.sh
1088
1089 4. List Stack details
1090
1091    a. Get the name of the Stack.
1092
1093          .. image:: images/PROX_Openstack_stack_list.png
1094             :width: 1000px
1095             :alt: NSB PROX openstack stack list
1096
1097    b. Get the Floating IP of the Traffic Generator & SUT
1098
1099       This generates a lot of information. Please not the floating IP of the VNF and
1100       the Traffic Generator.
1101
1102          .. image:: images/PROX_Openstack_stack_show_a.png
1103             :width: 1000px
1104             :alt: NSB PROX openstack stack show (Top)
1105
1106       From here you can see the floating IP Address of the SUT / VNF
1107
1108          .. image:: images/PROX_Openstack_stack_show_b.png
1109             :width: 1000px
1110             :alt: NSB PROX openstack stack show (Top)
1111
1112       From here you can see the floating IP Address of the Traffic Generator
1113
1114    c. Get ssh identity file
1115
1116       In the docker container locate the identity file.::
1117
1118         cd /home/opnfv/repos/yardstick/yardstick/resources/files
1119         ls -lt
1120
1121 5. Login to SUT as ``Ubuntu``.::
1122
1123      ssh -i ./yardstick_key-01029d1d ubuntu@172.16.2.158
1124
1125    Change to root::
1126
1127      sudo su
1128
1129     Now continue as baremetal.
1130
1131 6. Login to SUT as ``Ubuntu``.::
1132
1133      ssh -i ./yardstick_key-01029d1d ubuntu@172.16.2.156
1134
1135    Change to root::
1136
1137      sudo su
1138
1139     Now continue as baremetal.
1140
1141 *How do I resolve "Quota exceeded for resources"*
1142 -------------------------------------------------
1143
1144 *Solution*
1145
1146 This usually occurs due to 2 reasons when executing an openstack test.
1147
1148 1. One or more stacks already exists and are consuming all resources. To resolve ::
1149
1150      openstack stack list
1151
1152    Response::
1153
1154      +--------------------------------------+--------------------+-----------------+----------------------+--------------+
1155      | ID                                   | Stack Name         | Stack Status    | Creation Time        | Updated Time |
1156      +--------------------------------------+--------------------+-----------------+----------------------+--------------+
1157      | acb559d7-f575-4266-a2d4-67290b556f15 | yardstick-e05ba5a4 | CREATE_COMPLETE | 2017-12-06T15:00:05Z | None         |
1158      | 7edf21ce-8824-4c86-8edb-f7e23801a01b | yardstick-08bda9e3 | CREATE_COMPLETE | 2017-12-06T14:56:43Z | None         |
1159      +--------------------------------------+--------------------+-----------------+----------------------+--------------+
1160
1161    In this case 2 stacks already exist.
1162
1163    To remove stack::
1164
1165      openstack stack delete yardstick-08bda9e3
1166      Are you sure you want to delete this stack(s) [y/N]? y
1167
1168 2. The openstack configuration quotas are too small.
1169
1170    The solution is to increase the quota. Use below to query existing quotas::
1171
1172      openstack quota show
1173
1174    And to set quota::
1175
1176      openstack quota set <resource>
1177
1178 *Openstack Cli fails or hangs. How do I resolve this?*
1179 ------------------------------------------------------
1180
1181 *Solution*
1182
1183 If it fails due to ::
1184
1185    Missing value auth-url required for auth plugin password
1186
1187 Check your shell environment for Openstack variables. One of them should contain the authentication URL ::
1188
1189
1190    OS_AUTH_URL=``https://192.168.72.41:5000/v3``
1191
1192 Or similar. Ensure that openstack configurations are exported. ::
1193
1194    cat  /etc/kolla/admin-openrc.sh
1195
1196 Result ::
1197
1198    export OS_PROJECT_DOMAIN_NAME=default
1199    export OS_USER_DOMAIN_NAME=default
1200    export OS_PROJECT_NAME=admin
1201    export OS_TENANT_NAME=admin
1202    export OS_USERNAME=admin
1203    export OS_PASSWORD=BwwSEZqmUJA676klr9wa052PFjNkz99tOccS9sTc
1204    export OS_AUTH_URL=http://193.168.72.41:35357/v3
1205    export OS_INTERFACE=internal
1206    export OS_IDENTITY_API_VERSION=3
1207    export EXTERNAL_NETWORK=yardstick-public
1208
1209 and visible.
1210
1211 If the Openstack Cli appears to hang, then verify the proxys and no_proxy are set correctly.
1212 They should be similar to ::
1213
1214    FTP_PROXY="http://proxy.ir.intel.com:911/"
1215    HTTPS_PROXY="http://proxy.ir.intel.com:911/"
1216    HTTP_PROXY="http://proxy.ir.intel.com:911/"
1217    NO_PROXY="localhost,127.0.0.1,10.237.222.55,10.237.223.80,10.237.222.134,.ir.intel.com"
1218    ftp_proxy="http://proxy.ir.intel.com:911/"
1219    http_proxy="http://proxy.ir.intel.com:911/"
1220    https_proxy="http://proxy.ir.intel.com:911/"
1221    no_proxy="localhost,127.0.0.1,10.237.222.55,10.237.223.80,10.237.222.134,.ir.intel.com"
1222
1223 Where
1224
1225     1) 10.237.222.55 = IP Address of deployment node
1226     2) 10.237.223.80 = IP Address of Controller node
1227     3) 10.237.222.134 = IP Address of Compute Node
1228     4) ir.intel.com = local no proxy
1229
1230
1231
1232
1233
1234