-
Notifications
You must be signed in to change notification settings - Fork 120
/
changelog.txt
383 lines (379 loc) · 24.2 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
Pktgen-DPDK - Traffic Generator powered by DPDK
=====================================================
**Pktgen-DPDK is a traffic generator powered by DPDK**
** (Pktgen) Sounds like 'Packet-Gen'**
**=== Modifications ===**
- 24.10.3 - fix DPDK compatibility issues with 24.11.0-rc2
- 24.10.2 = fix tcp flags setting code.
- 24.10.1 - fix compiler warnings on packed-not-aligned for ubuntu 24.10
- 24.10.0 - fix a number of bugs for pcap crash, tcp flags, socket crash, random and startup.
PCAP crash memory overrun was found and fixed.
- 24.07.1 - add back support for Lua socket support.
- 24.07.0 - fix TX errors of packets greater then 100 bytes as MTU size was wrong.
Add support for UDP/TCP packets in pktperf application.
Update version date.
- 24.05.5 - Add a requirement for libbsd to app/meson.build Ubuntu 22.04.4
- 24.05.4 - Update docs to install BSD headers.
- 24.05.3 - Fix single port case causing a segfault.
- 24.05.2 - Make fgen requirement optional, which removes pktperf example.
- 24.05.1 - Merge in the performance updates and remove old/unused features.
- 24.05.0 - Update copyright and add comments to README.md and INSTALL.md files to point
users to Pktgen-DPDK on GitHub as the primary supported version.
- 24.03.1 - Fix updating stats when running Lua scripts.
Remove a number of old .map files.
Remove the unused CLI support for running with timers.
- 24.03.0 - Fix a number of problems with save command for lua scripts.
Removed the decompile/compile/sendPkt/recvPkt references.
Compiled with DPDK 24.03.0
- 23.11.1 - Update and fix performance issues.
- 23.11.0 - Add a new application pktperf to test performance improvements and validation.
- 23.10.2 - Fix range tcp flags and help messages
- 23.10.1 - Fix rte_thread_setname() change to rte_thread_set_name() for lua builds
- 23.10.0 - Change TX rate calculations to be more accurate
Change timer routines to use DPDK timer manager
Minor cleanup and bump version number.
- 23.06.1 - cleanup the code with clang-format.
- 23.06.0 - Fix up problem using "all" with portlist routines.
- 23.03.1 - In latency mode avg_cycles was only calculated when not using Lua.
- 23.03.0 - Update and fix a number of issues with latency. Some values were not updated
or displayed on screen or in a Lua script when getting port stats.
Latency packets are not able to be sent in any mode, instead of only being able
to send and report latencies in latency mode.
When using a portlist in lua it can be a single port in a string, a string range
or a single port using a Lua Number or Integer
- 22.07.2 - Changed the number of queues from 16 to 64.
- 22.07.1 - Update copyright dates and other minor fixes
- 22.07.0 - Add new rx/tx burst options.
Fix GUI build and stats.
Make build with DPDK more compatible.
Add max latency reporting.
Allow building on RISC-V platforms.
Add new rfc2455 script
Increase the number of mbufs allocated to support better performance.
Add restart command to try and cleanup the DPDK PMD or mbufs a start RX/TX.
Update documentation contribution guidlines.
Remove the -j option.
Add relative delay to compute rate stats and support multple queue stats.
- 22.04.1 - Fix Lua build issues around new stats structure changes.
- 22.02.0 - Remove the backward compatability builds with older versions of DPDK.
It has become too difficult to maintain building with older versions and I believe
the older DPDK version builds did not work as expected. Please only build DPDK with
the lastest version of DPDK or at least the previous version, but I do not guarantee
it will work. I will try to keep up with the latest release version of DPDK.
- 21.11.0 - Fix DPDK defines being renamed of deprecated. Also rte_eth_devices was made static.
- 21.10.0 - Fix up ARP processing, change pcap files to rw-rw-rw mode, pcap capture on the correct
numa node, increase the TX burst size, update to work with 21.11 DPDK, update the
tx_failed counter, add TCP flags/seq/ack, pcap use max packet size for mempool, pcap
is a multiple of pcap length, fixup AVX/AVX2 support, ipv6 updates.
- 21.03.1 - Fixup AVX and AVX2 compiler support, if enabled in meson_options.txt file.
- 21.03.0 - Fixup DPDK name changes and other minor problems.
- 21.02.0 - Cleanup display to be more compact and fix up colors
Update the copyright notice years
Fix the pcap issues with allocating memory on the wrong socket.
Add thousand separators to see rates and values easier.
- 21.01.2 - Add updated IPv6 support.
- 21.01.1 - Update the version number with fix for sending special mbufs for input processing.
- 21.01.0 - fix warning message spit out by DPDK and add lua-5.4 support in build.
- 20.12.0 - merge in latency test support with jitter and a number of minor cleanups
- 20.11.3 - fix changes in DPDK 20.11-rc4
- 20.11.2 - The dynfield0 was removed from rte_mbuf header
- 20.11.1 - Fix net_bond library name change for older DPDK versions.
- 20.11.0 - Fixup build to DPDK PMD name changes (bonding driver)
Fix the macro and function API name changes in DPDK 20.11
- 20.10.1 - Add option to disable avx2 support.
- 20.10.0 - fix ENA memory allocation and add setting rx/tx descriptor rings from cmdline.
- 20.09.0 - Fix the clearing of the port stats.
Fix the lua range commands to be a table only. Use pktgen.range.XYZ() to set range values.
Removed the use of pktgen.XYZ() type commands and require the range table to be used.
- 20.08.0 - Add better latency support with saving the results to a file.
Updated the INSTALL.md to help building DPDK and Pktgen.
Number of minor bugs or cleanup.
- 20.07.0 - Fix lua/gui builds to find the lua lib/headers on ubuntu 20.04
Update the INSTALL text to locate DPDK pkg-config, this also fixes Lua (I hope in all cases)
- 20.06.0 - Convert to using meson/ninja only builds.
Fix the default mbuf size.
Fix sending of special or ARP packets.
Add Makefile to use tools/pktgen-build.sh script for meson/ninja
Fix up building the docs using meson/ninja.
New target directory for install is $PKTGEN_DIR/usr/local, need to build and
install DPDK using meson/ninja.
- 20.04.0 - Disable Lua by default in meson_options.tst file for meson/ninja builds.
Lua support is disabled by default now as we move to meson/ninja builds only.
When building with meson/ninja DPDK needs to be built meson/ninja and installed.
- 20.03.0 - Fix a typo in run.py and add af_xdp config file.
- 20.02.0 - Fix link variable to be lk to not conflect with global link struct.
fix generating sequences with vlan header
fix sequence help message
- 19.12.0 - Add per queue stats when the hardware does not support it. Use
the 'page stats' command to see data and use 'port X' to switch
ports.
- 19.10.0 - Fix up the save/load commands to get correct as in GRE key
command
Fix up the problem with pcap files not getting sent if the
number of packets was small
fix up a crash if the scrn pointer was invalid on startup
fixed the log output in startup
Fixed the save/load scripts to use the correct commands.
Fix the IPv4/6 checksum calculations
- 19.08.0 - Fix linking of Lua library when no pkg-config file is found and
linking liblua.a
Fixed and issue with packet rate not being changed when the packet
size is changed
Change version numering to year.month.patch format
Change lua pktgen.set_mac() to have three args set_mac(<portlist>,
'src|dst', mac_addr) instead of two args
add support for setting via lua src and dst mac addresses
fix up the RSS port configuration options
updated code to adjust the packet tx interval based on command
changes on the packet size and other areas.
- 3.7.1 - Add TTL support to single and range modes. Better docs for dump packets
- Pktgen 3.7.1 will build with DPDK 18.02 to 19.08-rc2, but 18.08 has
a problem with vhost.h VRING_EVENT_F_AVAIL not defined and appears
the Ubuntu 19.04 version I am running does not define it correctly.
- fixed the RX side using TX count for rx_burst command.
- General cleanup
- 3.7.0 - Fixed build issues with DPDK 19.08 as DPDK renamed a lot of defines
Fixed up the meson files to build pktgen with meson and ninja
Minor cleanup
- 3.6.6 - Add portInfo() function in lua to return most of the port info in
one structure.
- 3.6.5 - Fix ldflags order for RHEL, CentOS and other systems to include lua in build
- 3.6.4 - Add a new page stats screen to dump out info
Updated the readme to give better info on .cfg files
Fixed the port <N> to include only valid ports
fix port command functions to use uint16_t for ports.
fix detection of Lua libs testing LUA_PKT_LIBS for Ubuntu 18.10
- 3.6.3 - Fix race condition in start command
Add support of having a different PCAP file per queue of a port
Replace constant with macro for PCAP buffer size
Expose number missed frames to Lua stats.
Fix cleanup of unsent pkts, this fixes duplicate packets being sent.
- 3.6.2 - Fix GRE header pointer being NULL and fixed IPPROTO_UDP to use PG_IPPROTO_UDP
- 3.6.1 - Fix string truncation warnings for latest GCC
- 3.6.0 - Fixed config files.
- Fixed tx stopping on some platforms.
- Updated the copyrights to 2019
- Add verbose flag to cleanup startup text.
- Adding support for VxLAN
- 3.5.9 - Fixed run.py to find config files better.
- Limit the pcap packets to the number of mbufs used.
- Added new 'page xstats' screen to view extended stats for ports.
- other minor patches
- 3.5.8 - Add code to check for using initial lcore for ports
- 3.5.7 - Fix CentOS building with Lua, fixed cli building as was not linking cli
- 3.5.6 - Minor fixes to cleanup builds sync cli,vec,utils and lua code bases.
- 3.5.5 - Minor fixes to run pktgen without libs in DPDK.
- 3.5.4 - Fix possible mbuf leak and clean up colors for pages.
- 3.5.3 - Fix performance problem on FVL NIC with losing mbufs.
Number of little cleanups and fixes.
- 3.5.2 - Fix 18.08-rc0 fixed some fields that were removed txq_flags and .ignore_offload_fields.
Tested backward compat to 18.02 at least. Pktgen should work with at least 18.02 release.
- 3.5.1 - Fix 18.05 related problems and minor cleanup in port configuration.
- 3.5.0 - fix compiler warning and range size increment command.
fixes for working with dpdk 18.04 release.
- 3.4.9 - fix PRNG random number code to work correctly.
Add more validation of -m commands
Fix the rte_pci_bus.h header include problems.
- 3.4.8 - Increase the TX retry count for VMs and reset mbuf as virtio modifies the data.
- 3.4.7 - Command file can now use 'quit' to exit and Lua scripts use pktgen.quit()
- 3.4.6 - Fixed low performance in a VM with virtio and a TX hang.
- 3.4.5 - Fixed a few backward compact issues and synced CLI code
- 3.4.4 - Fixed the long line problem in CLI and improved the performance.
- 3.4.3 - Fix compile problem with DPKD 17.11 and a number of bugs.
- 3.4.2 - Fix a build problem with older DPDK versions.
- 3.4.1 - Fix ARP packet processing and a fe minor cfg file changes.
- 3.4.0 - Fix bonding polling and other minor changes.
- 3.3.9 - PCI Whitelist and Blacklist should be the original defines and
does not require a ifdef for the version.
Convert the run.py to dpdk-run.py script and convert the scripts to /bin/sh.
- 3.3.8 - reverse change causing TX to stop sending traffic.
- 3.3.7 - Fix BLOCKLIST and WHITELIST macro change for 17.08 DPDK
- 3.3.6 - Add flag to enable bonding PMD to do TX calls with zero packets.
New command 'enable|disable bonding'
Cleanup some of the copyright dates to use 2018
- 3.3.5 - fix sequeuce command be truncated and fix run.py to fix strings in cfg file.
- 3.3.4 - Minor fixes for help and run.py scipt.
- 3.3.3 - Make sure the mbuf data size is at least 2K in size
- 3.3.2 - Fix set pkt types and fix setting the pkt size for IPv6
- 3.3.1 - Update the help for range and add compact commands for range
- 3.3.0 - Add new run configs and run.py script to setup and run pktgen
- 3.2.12- Rework the src/dst IP address again and fix the reset command
- 3.2.11- Fixed location of libs for per v17.05 releases
- 3.2.10- Fixed the problem with set <portlist> src/dst ip <addr> needing /XX for subnet
mask values.
Add a test for using the initial lcore for a port and error out.
- 3.2.9 - fixed a number of problems and some code cleanup
Fixed the problem when running a lua script the ports stats were not updated.
The problem is a rte_timer_manage() call was remove my mistake.
- 3.2.8 - fixed 'set <portlist> type ipv4|ipv6' used ip4|ip6 instead.
- 3.2.7 - Fix pktgen.seq() lua function Ethertype and protocol were swapped doc is correct.
- 3.2.6 - Fix the pcap page not displaying.
Fix standalone builds to include Lua headers.
- 3.2.5 - Fix setting of the seq_cnt in lua. Now you can use seqCnt or seq_cnt strings
for setting the sequeuce count value.
- 3.2.4 - Fix setting of MAC and IP addresses in single mode.
- 3.2.3 - Allow pktgen to build on DPDK 14.04
fix the new commands to use the correct syntax
- 3.2.2 - fix the clear stats command.
fix range commands to match help text.
- 3.2.1 - Update the readme file.
- 3.2.0 - Add support for decimal point rate values, like 10.1, 20.54, 90.6, ...
Convert over to use CLI interface instead of cmdline interface.
CLI is a directory like command line tool and please read the .rst file in the lib/cli directory
Many bug fixes.
- 3.1.2 - Convert spaces to tabs and add pktgen-cfg.[ch] page
Converting the spaces to tabs to allow for editing the code with tabs
set to 4 or 8 columns per tab. Changed to allow people who are stuck
on a tab=8 columns. We have modern computers tabs=4 columns seems reasonable.
- 3.1.1 - Minor cleanup of top level directory and code.
- 3.1.0 - Rename functions and files.
When files are written change the file modes to 0666 as they are owned by root.
More general cleanup of the display refresh.
loading command or lua files is faster because of the screen updates fixed.
- 3.0.17- Fixed a formating issue on sequence page for port numbers.
Save of lua code wrong for pktgen.range() should be pktgen.set_range().
- 3.0.16- Add command line option to strip FCS in hardware one RX.
Option is '--crc-strip' which strips the FCS on RX for all ports.
- 3.0.15- Update Lua to 5.3.3 version187
Change lua pktgen.range() to pktgen.set_range() plus added
the range commands from pktgen.dst_mac() to pktgen.range.dst_mac().
Still support the old commands for now.
Now polls the RX and TX queues to support eth_bond interfaces using
mode 4 or LACP.
- 3.0.14- Fix crash in saving configuration and random is not setup.
- 3.0.13- Fix seq only sending the first sequence packet and some cleanup.
- 3.0.12- Map port/queue pair stats to the correct lcore.
- 3.0.11- Fix compile problem with 16.04
- 3.0.10- Added the 'pdump <portlist>' command to hex dump the first packet to be
send on the given ports. Only the single packet mode is supported.
- 3.0.09- Add Fix for PCAP corruption.
- 3.0.08- Add Lua support for rnd and latency commands.
Now if latency is enable on a port then getting the stats will get
the latency values via lua table.
- 3.0.07- Fixed crash on exit when using more then one core per port.
- 3.0.06- Fix PCI null pointer when using virtual devices.
Removed the C11 constructs to compile on C99 compilers.
Fix the bug of old packets after changes for new run.
The problem is DPDK holds on to the mbufs in the TX done queue
and those can not be changed. With 16.07 we can find all of the mbufs
and changed them to correct format/sizes.
- 3.0.05- New Latency/Jitter page 'page latency'
Need to adjust the packet size to 96 to allow for latency timestamp.
type: page latency
latency 0 on
set 0 size 96
start 0
- 3.0.04- Display reported the wrong rate in Mbits because the counters were not
including the FCS bytes in the value as it was before.
Minor cleanup of the code for formating.
- 3.0.03- General clean up of scripts
Add support for share library builds
Clean up formating
Add PCI info screen
GUI 1.0 support
- 3.0.02- Fix up the IPv6 address macros for musl libc support
Fix the missing pthread.h include in lua socket header.
Add the rnd lua support APIs
Fix the checksum issue with rnd changes.
- 3.0.01- Fixed the Range sequence and VLAN problem.
- 3.0.00- Fixed code to ifdef the imcasts counters that were deprecated.
- 2.9.18- Fix the range command to set IP proto value and be able to save that value.
- 2.9.17- Fix PCAP crash when using multiple tx queues.
- 2.9.16- Fix include problems with cmdline_parse.h file.
missing cmdline_parse_token_hdr_t define and looks like the header was not
included in the pktgen-seq.h file for DPDK v2.2.0 and pktgen-2.9.15
- 2.9.15- Update Lua to version 5.3.2
- 2.9.14- Fix compiler error for gcc-4.9 and inet_ntop() routine
- 2.9.13- Add max last seen RX/TX packets to display.
- 2.9.12- Was not able to set IP protocol type for range packets.
New command range.proto <portlist> udp|tcp|icmp
Lua command is pktgen.ip_proto("all", "udp")
- 2.9.11- Fix version string for new version style in DPDK.
- 2.9.10- Reformat the code and get ready for the next release of DPDK.
- 2.9.9 - Update the init screen output to not screw up DPDK screen output.
- 2.9.8 - Fixed the crash when using the sequence packets.
- 2.9.7 - Changed all rte_zmalloc to rte_zmalloc_socket calls and change seq_pkt support.
The fix for multiple cores accessing seq_pkts was to allocate memory and copy
into a private area. This sometimes caused memory allocation problems, so I
removed the allocation and used spinlocks around the code. Most likely slower
in some areas but better then allocating memory.
- 2.9.6 - Add support for different pattern types and a user patten string.
New commands are 'pattern <portlist> type'.
Types are abc, none, zero or user
New command 'user.pattern <portlist> <string>' The string can not contain a space
which is a limitation of the rte_cmdline code.
Added new Lua command for the above 'pattern(<portlist>, <type>)'
and 'userPatten(<portlist>, <string>)'
- 2.9.5 - Fixed sequence packet race condition for multiple senders.
- 2.9.4 - Fixed the ARP sends were not being flushed
- 2.9.3 - Remove change log and comment out the eth stop when done sending.
This will most likely screw up the pcap and others, but stopping the port is not good.
- 2.9.1 - Fix up the sequeue help to remove vlan option with ipv4/ipv6
- 2.9.0 - Update to DPDK 2.0.0 and Lua 5.3.0 with README update.
- 2.8.6 - Fix argument for rte_mempool_create, which caused a crash.
- 2.8.5 - Fix compat problem with latest Pktgen and DPDK 1.8.0
- 2.8.4 - Minor updates for comments.
- 2.8.3 - Updated the Makefiles to use rte.extXYZ.mk files.
Updated the code to build with DPDK 2.0.0-rc1 as some function prototype changed.
- 2.8.2 - Fix bug in pktgen_main_receive routine not using the correct port number.
- 2.8.1 - Add a new docs directory using Sphinx format and update version numbers.
- 2.8.0 - Update to release 1.8.0 of DPDK.
- 2.7.7 - Update Lua to 5.2.3 and fixed setting vlan ID on single ports plus added new Lua functions
New Lua functions are pktgen.portCount() and pktgen.totalPorts() portCount() is the number of
port used by Pktgen and totalPorts() is the total number seen by DPDK.
- 2.7.6 - Update code from dpdk.org version of Pktgen, which hopefull fixes the send foreve problem.
- 2.7.5 - Update to latest dpdk.org and move scrn to lib directory with name changes.
- 2.7.4 - Removed old printf_info() calls for printf_status() calls.
- 2.7.3 - Fixed race condition with updating the TX count value with a small count.
- 2.7.1 - Add a command line option '-T' to enable themes and set themes off by default.
- 2.7.0 - Update to DPDK 1.7.0, Note: DPDK 1.7.0 changed how ports are detected and blocklisted,
which means the port index is now different. You will need to blocklist or allowlist ports
with the DPDK '-b' or '--pci-blocklist or --pci-allowlist' options. Pktgen does not blocklist
ports anymore.
- Moved pktgen to the examples directory plus removed the libwr_* from the lib directory
- Pktgen now supports ANSI color terminals only the main screen ATM, but more later.
- Best viewed on a black background display, unless you want to change it with the new theme commands.
- More supported generator types, checkout the help screens.
- 2.6.8 - Fixed a transmit problem when count is set to one. Plus increase the link down delays.
- 2.6.7 - Add more support for GRE packets, log support and more testing code.
- 2.6.6 - Fix compile problem when not SSE4.2 instructions are not supported. Allowing QEMU and other
systems to build and run. Also added a patch to take into account huge reserved pages.
- 2.6.5 - Added support for logging packet information.
- 2.6.4 - It consists of 3 commits: improvements to the pktgen-random.c unit tests,
the real CentOS compilation fixes and a small update to tap.{c,h} so they
are identical to those from zorgnax/libtap on github.
- 2.6.3 - Add a delay when traffic stops to make sure all packets are sent.
Remove the `rte_hash_crc.h` include in wr_pcap.c file.
- 2.6.2 - Fixup GRE and ARP problems
- 2.6.1 - Add random bits support and more cleanup
- 2.6.0 - Split up the code for testing to be added later
- 2.5.2 - Remove extra ethertypes.h file.
- 2.5.1 - Added the following updates.
- Implement-Rx-packet-dump-functionality
- Add-packet-capture-functionality
- Add-MPLS-functionality
- Add-Q-in-Q-802.11ad-functionality
- Add-GRE-header-generation
- Fix-UDP-TCP-ICMP-protocol-selection
- Add-ARP-protocol
- 2.5.0 - Update to DPDK 1.6.0 plus a few bug fixes.
- 2.4.1 - Fixed a bug in range packets when 'inc' value is zero use start values.
- 2.4.0 - Add support for TX tap packets. Change 'tap' command to rxtap and txtap.
- 2.3.4 - Minor update to help eliminate RX errors and be able to receive at wire rate.
- 2.3.3 - Update to minor release 1.5.2
- 2.3.2 - Fixed VLAN detection problem in ARP and special GARP support.
- 2.3.1 - Getting closer to line rate tx speed.
- 2.3.0 - Now supports the VLAN encapsulated packets for ARP replies
Also added a special GARP processing to update the destination MAC
address to help support a special request for failover support.
Added support for DPDK 1.5.1
- 2.2.7 - Updated the code to handle multiple TX queues per port.
- 2.2.6 - Fixed a crash if the port is not up with link status
- 2.2.5 - Remove the flow control code as some systems it does not work.
- 2.2.4 - Fix the `inet_h64tom and inet_mtoh64` functions to account for endianness
- 2.2.3 - range packet fixes for packet size and source/destination mac
- 2.2.2 - Minor performance changes for receive packet performance.
- 2.2.1 - Change MAC address from XXXX:XXXX:XXXX to XX:XX:XX:XX:XX:XX format
Fixed Pktgen to allow packet changes without having to restart the tool.
- 2.2.0 - Update to DPDK 1.5.0
**=====================**