40eec3a4921ff8001c34053e3cdaa42ffae357f2
[dpdk.git] / doc / guides / rel_notes / release_18_05.rst
1 DPDK Release 18.05
2 ==================
3
4 .. **Read this first.**
5
6    The text in the sections below explains how to update the release notes.
7
8    Use proper spelling, capitalization and punctuation in all sections.
9
10    Variable and config names should be quoted as fixed width text:
11    ``LIKE_THIS``.
12
13    Build the docs and view the output file to ensure the changes are correct::
14
15       make doc-guides-html
16
17       xdg-open build/doc/html/guides/rel_notes/release_18_05.html
18
19
20 New Features
21 ------------
22
23 .. This section should contain new features added in this release. Sample
24    format:
25
26    * **Add a title in the past tense with a full stop.**
27
28      Add a short 1-2 sentence description in the past tense. The description
29      should be enough to allow someone scanning the release notes to
30      understand the new feature.
31
32      If the feature adds a lot of sub-features you can use a bullet list like
33      this:
34
35      * Added feature foo to do something.
36      * Enhanced feature bar to do something else.
37
38      Refer to the previous release notes for examples.
39
40      This section is a comment. Do not overwrite or remove it.
41      Also, make sure to start the actual text at the margin.
42      =========================================================
43
44 * **Added bucket mempool driver.**
45
46   Added bucket mempool driver which provides a way to allocate contiguous
47   block of objects.
48   Number of objects in the block depends on how many objects fit in
49   RTE_DRIVER_MEMPOOL_BUCKET_SIZE_KB memory chunk which is build time option.
50   The number may be obtained using rte_mempool_ops_get_info() API.
51   Contiguous blocks may be allocated using rte_mempool_get_contig_blocks() API.
52
53 * **Added PMD-recommended Tx and Rx parameters**
54
55   Applications can now query drivers for device-tuned values of
56   ring sizes, burst sizes, and number of queues.
57
58 * **Added RSS hash and key update to CXGBE PMD.**
59
60   Support to update RSS hash and key has been added to CXGBE PMD.
61
62 * **Added CXGBE VF PMD.**
63
64   CXGBE VF Poll Mode Driver has been added to run DPDK over Chelsio
65   T5/T6 NIC VF instances.
66
67 * **Updated mlx5 driver.**
68
69   Updated the mlx5 driver including the following changes:
70
71   * Introduced Multi-packet Rx. With it, achieved 100Gb/sec with 64B frames.
72   * Supported to be run by non-root users given reduced set of capabilities
73     CAP_NET_ADMIN, CAP_NET_RAW and CAP_IPC_LOCK.
74   * Supported TSO and checksum for generic UDP and IP tunnels.
75   * Supported inner checksum and RSS for GRE, VXLAN-GPE, MPLSoGRE
76     and MPLSoUDP tunnels.
77   * Accommodate to the new memory hotplug model.
78   * Supported non virtually contiguous mempools.
79   * Supported MAC adding along with allmulti and promiscuous modes from VF.
80   * Supported Mellanox BlueField SoC device.
81   * Supported PMD defaults for queue number and depth to improve the out
82     of the box performance.
83
84 * **Updated mlx4 driver.**
85
86   Updated the mlx4 driver including the following changes:
87
88   * Supported to be run by non-root users given reduced set of capabilities
89     CAP_NET_ADMIN, CAP_NET_RAW and CAP_IPC_LOCK.
90   * Supported CRC strip toggling.
91   * Accommodate to the new memory hotplug model.
92   * Supported non virtually contiguous mempools.
93
94 * **Updated Solarflare network PMD.**
95
96   Updated the sfc_efx driver including the following changes:
97
98   * Added support for Solarflare XtremeScale X2xxx family adapters.
99   * Added support for NVGRE, VXLAN and GENEVE filters in flow API.
100   * Added support for DROP action in flow API.
101   * Added support for equal stride super-buffer Rx mode (X2xxx only).
102   * Added support for MARK and FLAG actions in flow API (X2xxx only).
103
104 * **Added Ethernet poll mode driver for AMD XGBE devices.**
105
106   Added the new ``axgbe`` ethernet poll mode driver for AMD XGBE devices.
107   See the :doc:`../nics/axgbe` nic driver guide for more details on this
108   new driver.
109
110 * **Updated szedata2 PMD.**
111
112   Added support for new NFB-200G2QL card.
113   New API was introduced in the libsze2 library which the szedata2 PMD depends
114   on thus the new version of the library was needed.
115   New versions of the packages are available and the minimum required version
116   is 4.4.1.
117
118 * **Added support for Broadcom NetXtreme-S (BCM58800) family of controllers (aka Stingray)**
119
120   The BCM58800 devices feature a NetXtreme E-Series advanced network controller, a high-performance
121   ARM CPU block, PCI Express (PCIe) Gen3 interfaces, key accelerators for compute offload and a high-
122   speed memory subsystem including L3 cache and DDR4 interfaces, all interconnected by a coherent
123   Network-on-chip (NOC) fabric.
124
125   The ARM CPU subsystem features eight ARMv8 Cortex-A72 CPUs at 3.0 GHz, arranged in a multi-cluster
126   configuration.
127
128 * **Added IFCVF vDPA driver.**
129
130   Added IFCVF vDPA driver to support Intel FPGA 100G VF device. IFCVF works
131   as a HW vhost data path accelerator, it supports live migration and is
132   compatible with virtio 0.95 and 1.0. This driver registers ifcvf vDPA driver
133   to vhost lib, when virtio connected, with the help of the registered vDPA
134   driver the assigned VF gets configured to Rx/Tx directly to VM's virtio
135   vrings.
136
137 * **Added support for virtio-user server mode.**
138   In a container environment if the vhost-user backend restarts, there's no way
139   for it to reconnect to virtio-user. To address this, support for server mode
140   is added. In this mode the socket file is created by virtio-user, which the
141   backend connects to. This means that if the backend restarts, it can reconnect
142   to virtio-user and continue communications.
143
144 * **Added crypto workload support to vhost library.**
145
146   New APIs are introduced in vhost library to enable virtio crypto support
147   including session creation/deletion handling and translating virtio-crypto
148   request into DPDK crypto operations. A sample application is also introduced.
149
150 * **Added virtio crypto PMD.**
151
152   Added a new poll mode driver for virtio crypto devices, which provides
153   AES-CBC ciphering and AES-CBC with HMAC-SHA1 algorithm-chaining. See the
154   :doc:`../cryptodevs/virtio` crypto driver guide for more details on
155   this new driver.
156
157 * **Added AMD CCP Crypto PMD.**
158
159   Added the new ``ccp`` crypto driver for AMD CCP devices. See the
160   :doc:`../cryptodevs/ccp` crypto driver guide for more details on
161   this new driver.
162
163 * **Updated AESNI MB PMD.**
164
165   The AESNI MB PMD has been updated with additional support for:
166
167   * AES-CMAC (128-bit key).
168
169 * **Added Compressdev Library, a generic compression service library.**
170
171   The compressdev library provides an API for offload of compression and
172   decompression operations to hardware or software accelerator devices.
173
174 * **Added a new compression poll mode driver using Intels ISA-L.**
175
176    Added the new ``ISA-L`` compression driver, for compression and decompression
177    operations in software. See the :doc:`../compressdevs/isal` compression driver
178    guide for details on this new driver.
179
180 * **Added the Event Timer Adapter Library.**
181
182   The Event Timer Adapter Library extends the event-based model by introducing
183   APIs that allow applications to arm/cancel event timers that generate
184   timer expiry events. This new type of event is scheduled by an event device
185   along with existing types of events.
186
187 * **Added OcteonTx TIM Driver (Event timer adapter).**
188
189   The OcteonTx Timer block enables software to schedule events for a future
190   time, it is exposed to an application via Event timer adapter library.
191
192   See the :doc:`../eventdevs/octeontx` guide for more details
193
194 * **Added Event Crypto Adapter Library.**
195
196     Added the Event Crypto Adapter Library.  This library extends the
197     event-based model by introducing APIs that allow applications to
198     enqueue/dequeue crypto operations to/from cryptodev as events scheduled
199     by an event device.
200
201 * **Added Ifpga Bus, a generic Intel FPGA Bus library.**
202
203   The Ifpga Bus library provides support for integrating any Intel FPGA device with
204   the DPDK framework. It provides Intel FPGA Partial Bit Stream AFU (Accelerated
205   Function Unit) scan and drivers probe.
206
207 * **Added IFPGA (Intel FPGA) Rawdev Driver.**
208
209   Added a new Rawdev driver called IFPGA(Intel FPGA) Rawdev Driver, which cooperates
210   with OPAE (Open Programmable Acceleration Engine) share code provides common FPGA
211   management ops for FPGA operation.
212
213   See the :doc:`../rawdevs/ifpga_rawdev` programmer's guide for more details.
214
215 * **Added DPAA2 QDMA Driver (in rawdev).**
216
217   The DPAA2 QDMA is an implementation of the rawdev API, that provide means
218   to initiate a DMA transaction from CPU. The initiated DMA is performed
219   without CPU being involved in the actual DMA transaction.
220
221   See the :doc:`../rawdevs/dpaa2_qdma` guide for more details.
222
223 * **Added DPAA2 Command Interface Driver (in rawdev).**
224
225   The DPAA2 CMDIF is an implementation of the rawdev API, that provides
226   communication between the GPP and NXP's QorIQ based AIOP Block (Firmware).
227   Advanced IO Processor i.e. AIOP is clusters of programmable RISC engines
228   optimised for flexible networking and I/O operations. The communication
229   between GPP and AIOP is achieved via using DPCI devices exposed by MC for
230   GPP <--> AIOP interaction.
231
232   See the :doc:`../rawdevs/dpaa2_cmdif` guide for more details.
233
234 * **Added device event monitor framework.**
235
236   Added a general device event monitor framework at EAL, for device dynamic management.
237   Such as device hotplug awareness and actions adopted accordingly. The list of new APIs:
238
239   * ``rte_dev_event_monitor_start`` and ``rte_dev_event_monitor_stop`` are for
240     the event monitor enable and disable.
241   * ``rte_dev_event_callback_register`` and ``rte_dev_event_callback_unregister``
242     are for the user's callbacks register and unregister.
243
244   Linux uevent is supported as backend of this device event notification framework.
245
246 * **Added support for procinfo and pdump on eth vdev.**
247
248   For ethernet virtual devices (like tap, pcap, etc), with this feature, we can get
249   stats/xstats on shared memory from secondary process, and also pdump packets on
250   those virtual devices.
251
252 * **Added the BPF Library.**
253
254   The BPF Library provides the ability to load and execute
255   Enhanced Berkeley Packet Filter (eBPF) within user-space dpdk application.
256   Also it introduces basic framework to load/unload BPF-based filters
257   on eth devices (right now only via SW RX/TX callbacks).
258   It also adds dependency on libelf.
259
260
261 API Changes
262 -----------
263
264 .. This section should contain API changes. Sample format:
265
266    * Add a short 1-2 sentence description of the API change. Use fixed width
267      quotes for ``rte_function_names`` or ``rte_struct_names``. Use the past
268      tense.
269
270    This section is a comment. Do not overwrite or remove it.
271    Also, make sure to start the actual text at the margin.
272    =========================================================
273
274 * service cores: no longer marked as experimental.
275
276   The service cores functions are no longer marked as experimental, and have
277   become part of the normal DPDK API and ABI. Any future ABI changes will be
278   announced at least one release before the ABI change is made. There are no
279   ABI breaking changes planned.
280
281 * eal: ``rte_lcore_has_role()`` return value changed.
282
283   This function now returns true or false, respectively,
284   rather than 0 or <0 for success or failure.
285   It makes use of the function more intuitive.
286
287 * mempool: capability flags and related functions have been removed.
288
289   Flags ``MEMPOOL_F_CAPA_PHYS_CONTIG`` and
290   ``MEMPOOL_F_CAPA_BLK_ALIGNED_OBJECTS`` were used by octeontx mempool
291   driver to customize generic mempool library behaviour.
292   Now the new driver callbacks ``calc_mem_size`` and ``populate`` may be
293   used to achieve it without specific knowledge in the generic code.
294
295 * mempool: xmem functions have been deprecated:
296
297   - ``rte_mempool_xmem_create``
298   - ``rte_mempool_xmem_size``
299   - ``rte_mempool_xmem_usage``
300   - ``rte_mempool_populate_iova_tab``
301
302 * mbuf: The control mbuf API has been removed in v18.05. The impacted
303   functions and macros are:
304
305   - ``rte_ctrlmbuf_init()``
306   - ``rte_ctrlmbuf_alloc()``
307   - ``rte_ctrlmbuf_free()``
308   - ``rte_ctrlmbuf_data()``
309   - ``rte_ctrlmbuf_len()``
310   - ``rte_is_ctrlmbuf()``
311   - ``CTRL_MBUF_FLAG``
312
313   The packet mbuf API should be used as a replacement.
314
315 * meter: updated to accommodate configuration profiles.
316
317   The meter API is changed to support meter configuration profiles. The
318   configuration profile represents the set of configuration parameters
319   for a given meter object, such as the rates and sizes for the token
320   buckets. These configuration parameters were previously the part of meter
321   object internal data strcuture. The separation of the configuration
322   parameters from meter object data structure results in reducing its
323   memory footprint which helps in better cache utilization when large number
324   of meter objects are used.
325
326 * ethdev: The function ``rte_eth_dev_count``, often mis-used to iterate
327   over ports, is deprecated and replaced by ``rte_eth_dev_count_avail``.
328   There is also a new function ``rte_eth_dev_count_total`` to get the
329   total number of allocated ports, available or not.
330   The hotplug-proof applications should use ``RTE_ETH_FOREACH_DEV`` or
331   ``RTE_ETH_FOREACH_DEV_OWNED_BY`` as port iterators.
332
333 * ethdev, in struct ``struct rte_eth_dev_info``, field ``rte_pci_device *pci_dev``
334   replaced with field ``struct rte_device *device``.
335
336 * **Changes to semantics of rte_eth_dev_configure() parameters.**
337
338    If both the ``nb_rx_q`` and ``nb_tx_q`` parameters are zero,
339    ``rte_eth_dev_configure`` will now use PMD-recommended queue sizes, or if
340    recommendations are not provided by the PMD the function will use ethdev
341    fall-back values. Previously setting both of the parameters to zero would
342    have resulted in ``-EINVAL`` being returned.
343
344 * **Changes to semantics of rte_eth_rx_queue_setup() parameters.**
345
346    If the ``nb_rx_desc`` parameter is zero, ``rte_eth_rx_queue_setup`` will
347    now use the PMD-recommended Rx ring size, or in the case where the PMD
348    does not provide a recommendation, will use an ethdev-provided
349    fall-back value. Previously, setting ``nb_rx_desc`` to zero would have
350    resulted in an error.
351
352 * **Changes to semantics of rte_eth_tx_queue_setup() parameters.**
353
354    If the ``nb_tx_desc`` parameter is zero, ``rte_eth_tx_queue_setup`` will
355    now use the PMD-recommended Tx ring size, or in the case where the PMD
356    does not provide a recoomendation, will use an ethdev-provided
357    fall-back value. Previously, setting ``nb_tx_desc`` to zero would have
358    resulted in an error.
359
360 * ethdev: several changes were made to the flow API.
361
362   * Unused DUP action was removed.
363   * Actions semantics in flow rules: list order now matters ("first
364     to last" instead of "all simultaneously"), repeated actions are now
365     all performed, and they do not individually have (non-)terminating
366     properties anymore.
367   * Flow rules are now always terminating unless a PASSTHRU action is
368     present.
369   * C99-style flexible arrays were replaced with standard pointers in RSS
370     action and in RAW pattern item structures due to compatibility issues.
371   * The RSS action was modified to not rely on external
372     ``struct rte_eth_rss_conf`` anymore to instead expose its own and more
373     appropriately named configuration fields directly
374     (``rss_conf->rss_key`` => ``key``,
375     ``rss_conf->rss_key_len`` => ``key_len``,
376     ``rss_conf->rss_hf`` => ``types``,
377     ``num`` => ``queue_num``), and the addition of missing RSS parameters
378     (``func`` for RSS hash function to apply and ``level`` for the
379     encapsulation level).
380   * The VLAN pattern item (``struct rte_flow_item_vlan``) was modified to
381     include inner EtherType instead of outer TPID. Its default mask was also
382     modified to cover the VID part (lower 12 bits) of TCI only.
383   * A new transfer attribute was added to ``struct rte_flow_attr`` in order
384     to clarify the behavior of some pattern items.
385   * PF and VF pattern items are now only accepted by PMDs that implement
386     them (bnxt and i40e) when the transfer attribute is also present for
387     consistency.
388   * Pattern item PORT was renamed PHY_PORT to avoid confusion with DPDK port
389     IDs.
390   * An action counterpart to the PHY_PORT pattern item was added in order to
391     redirect matching traffic to a specific physical port.
392   * PORT_ID pattern item and actions were added to match and target DPDK
393     port IDs at a higher level than PHY_PORT.
394
395 * ethdev: change flow APIs regarding count action:
396   * ``rte_flow_create()`` API count action now requires the ``struct rte_flow_action_count``.
397   * ``rte_flow_query()`` API parameter changed from action type to action structure.
398
399 * ethdev: changes to offload API
400
401    A pure per-port offloading isn't requested to be repeated in [rt]x_conf->offloads to
402    ``rte_eth_[rt]x_queue_setup()``. Now any offloading enabled in ``rte_eth_dev_configure()``
403    can't be disabled by ``rte_eth_[rt]x_queue_setup()``. Any new added offloading which has
404    not been enabled in ``rte_eth_dev_configure()`` and is requested to be enabled in
405    ``rte_eth_[rt]x_queue_setup()`` must be per-queue type, otherwise trigger an error log.
406
407 * ethdev: runtime queue setup:
408
409   ``rte_eth_rx_queue_setup`` and ``rte_eth_tx_queue_setup`` can be called after
410   ``rte_eth_dev_start`` if device support runtime queue setup. Device driver can
411   expose this capability through ``rte_eth_dev_info_get``. A Rx or Tx queue be
412   setup at runtime need to be started explicitly by ``rte_eth_dev_rx_queue_start``
413   or ``rte_eth_dev_tx_queue_start``.
414
415
416 ABI Changes
417 -----------
418
419 .. This section should contain ABI changes. Sample format:
420
421    * Add a short 1-2 sentence description of the ABI change that was announced
422      in the previous releases and made in this release. Use fixed width quotes
423      for ``rte_function_names`` or ``rte_struct_names``. Use the past tense.
424
425    This section is a comment. Do not overwrite or remove it.
426    Also, make sure to start the actual text at the margin.
427    =========================================================
428
429 * ring: the alignment constraints on the ring structure has been relaxed
430   to one cache line instead of two, and an empty cache line padding is
431   added between the producer and consumer structures. The size of the
432   structure and the offset of the fields remains the same on platforms
433   with 64B cache line, but change on other platforms.
434
435 * mempool: ops have changed.
436
437   A new callback ``calc_mem_size`` has been added to ``rte_mempool_ops``
438   to allow to customize required memory size calculation.
439   A new callback ``populate`` has been added to ``rte_mempool_ops``
440   to allow to customize objects population.
441   Callback ``get_capabilities`` has been removed from ``rte_mempool_ops``
442   since its features are covered by ``calc_mem_size`` and ``populate``
443   callbacks.
444   Callback ``register_memory_area`` has been removed from ``rte_mempool_ops``
445   since the new callback ``populate`` may be used instead of it.
446
447 * **Additional fields in rte_eth_dev_info.**
448
449   The ``rte_eth_dev_info`` structure has had two extra entries appended to the
450   end of it: ``default_rxportconf`` and ``default_txportconf``. Each of these
451   in turn are ``rte_eth_dev_portconf`` structures containing three fields of
452   type ``uint16_t``: ``burst_size``, ``ring_size``, and ``nb_queues``. These
453   are parameter values recommended for use by the PMD.
454
455 * ethdev: ABI for all flow API functions was updated.
456
457   This includes functions ``rte_flow_copy``, ``rte_flow_create``,
458   ``rte_flow_destroy``, ``rte_flow_error_set``, ``rte_flow_flush``,
459   ``rte_flow_isolate``, ``rte_flow_query`` and ``rte_flow_validate``, due to
460   changes in error type definitions (``enum rte_flow_error_type``), removal
461   of the unused DUP action (``enum rte_flow_action_type``), modified
462   behavior for flow rule actions (see API changes), removal of C99 flexible
463   array from RAW pattern item (``struct rte_flow_item_raw``), complete
464   rework of the RSS action definition (``struct rte_flow_action_rss``),
465   sanity fix in the VLAN pattern item (``struct rte_flow_item_vlan``) and
466   new transfer attribute (``struct rte_flow_attr``).
467
468 **New parameter added to rte_bbdev_op_cap_turbo_dec.**
469
470   A new parameter ``max_llr_modulus`` has been added to
471   ``rte_bbdev_op_cap_turbo_dec`` structure to specify maximal LLR (likelihood
472   ratio) absolute value.
473
474 * **BBdev Queue Groups split into UL/DL Groups**
475
476   Queue Groups have been split into UL/DL Groups in Turbo Software Driver.
477   They are independent for Decode/Encode. ``rte_bbdev_driver_info`` reflects
478   introduced changes.
479
480
481 Removed Items
482 -------------
483
484 .. This section should contain removed items in this release. Sample format:
485
486    * Add a short 1-2 sentence description of the removed item in the past
487      tense.
488
489    This section is a comment. Do not overwrite or remove it.
490    Also, make sure to start the actual text at the margin.
491    =========================================================
492
493
494 Known Issues
495 ------------
496
497 .. This section should contain new known issues in this release. Sample format:
498
499    * **Add title in present tense with full stop.**
500
501      Add a short 1-2 sentence description of the known issue in the present
502      tense. Add information on any known workarounds.
503
504    This section is a comment. Do not overwrite or remove it.
505    Also, make sure to start the actual text at the margin.
506    =========================================================
507
508 * **pdump is not compatible with old applications.**
509
510   As we changed to use generic multi-process communication for pdump negotiation
511   instead of previous dedicated unix socket way, pdump applications, including
512   dpdk-pdump example and any other applications using librte_pdump, cannot work
513   with older version DPDK primary applications.
514
515
516 Shared Library Versions
517 -----------------------
518
519 .. Update any library version updated in this release and prepend with a ``+``
520    sign, like this:
521
522      librte_acl.so.2
523    + librte_cfgfile.so.2
524      librte_cmdline.so.2
525
526    This section is a comment. Do not overwrite or remove it.
527    =========================================================
528
529
530 The libraries prepended with a plus sign were incremented in this version.
531
532 .. code-block:: diff
533
534      librte_acl.so.2
535      librte_bbdev.so.1
536      librte_bitratestats.so.2
537    + librte_bpf.so.1
538      librte_bus_dpaa.so.1
539      librte_bus_fslmc.so.1
540      librte_bus_pci.so.1
541      librte_bus_vdev.so.1
542      librte_cfgfile.so.2
543      librte_cmdline.so.2
544    + librte_common_octeontx.so.1
545    + librte_compressdev.so.1
546      librte_cryptodev.so.4
547      librte_distributor.so.1
548    + librte_eal.so.7
549    + librte_ethdev.so.9
550    + librte_eventdev.so.4
551      librte_flow_classify.so.1
552      librte_gro.so.1
553      librte_gso.so.1
554      librte_hash.so.2
555      librte_ip_frag.so.1
556      librte_jobstats.so.1
557      librte_kni.so.2
558      librte_kvargs.so.1
559      librte_latencystats.so.1
560      librte_lpm.so.2
561    + librte_mbuf.so.4
562    + librte_mempool.so.4
563    + librte_meter.so.2
564      librte_metrics.so.1
565      librte_net.so.1
566      librte_pci.so.1
567      librte_pdump.so.2
568      librte_pipeline.so.3
569      librte_pmd_bnxt.so.2
570      librte_pmd_bond.so.2
571      librte_pmd_i40e.so.2
572      librte_pmd_ixgbe.so.2
573    + librte_pmd_dpaa2_cmdif.so.1
574    + librte_pmd_dpaa2_qdma.so.1
575      librte_pmd_ring.so.2
576      librte_pmd_softnic.so.1
577      librte_pmd_vhost.so.2
578      librte_port.so.3
579      librte_power.so.1
580      librte_rawdev.so.1
581      librte_reorder.so.1
582    + librte_ring.so.2
583      librte_sched.so.1
584      librte_security.so.1
585      librte_table.so.3
586      librte_timer.so.1
587      librte_vhost.so.3
588
589
590 Tested Platforms
591 ----------------
592
593 .. This section should contain a list of platforms that were tested with this
594    release.
595
596    The format is:
597
598    * <vendor> platform with <vendor> <type of devices> combinations
599
600      * List of CPU
601      * List of OS
602      * List of devices
603      * Other relevant details...
604
605    This section is a comment. Do not overwrite or remove it.
606    Also, make sure to start the actual text at the margin.
607    =========================================================