Document revision:0.4 (February 6, 2008, 4:21 GMT)
Applies to: V3.0

General Information


The MikroTik Packet Packer Protocol (M3P) optimizes the data rate usage of links using protocols that have a high overhead per packet transmitted. The basic purpose of this protocol is to better enable wireless networks to transport VoIP traffic and other traffic that uses small packet sizes of around 100 bytes.

M3P features:


Packages required: system
License required: Level1
Submenu level: /ip packing
Standards and Technologies: M3P
Hardware usage: Not significant


The wireless protocol IEEE 802.11 and, to a lesser extent, Ethernet protocol have a high overhead per packet as for each packet it is necessary to access the media, check for errors, resend in case of errors occured, and send network maintenance messages (network maintenance is applicable only for wireless). The MikroTik Packet Packer Protocol improves network performance by aggregating many small packets into a big packet, thereby minimizing the network per packet overhead cost. The M3P is very effective when the average packet size is 50-300 bytes the common size of VoIP packets.



Submenu level: /ip packing


M3P is working only between MikroTik routers, which are discovered with MikroTik Neighbor Discovery Protocol (MNDP). When M3P is enabled router needs to know which of its neighbouring hosts have enabled M3P. MNDP is used to negotiate unpacking settings of neighbours, therefore it has to be enabled on interfaces you wish to enable M3P. Consult MNDP manual on how to do it.

Property Description

aggregated-size (integer; default: 1500) - the maximum aggregated packet's size

interface (name) - interface to enable M3P on

packing (none | simple | compress-all | compress-headers; default: simple) - specifies the packing mode
none - no packing is applied to packets
simple - aggregate many small packets into one large packet, minimizing network overhead per packet
compress-headers - further increase network performance by compressing IP packet header (consumes more CPU resources)
compress-all - increase network performance even more by using header and data compression (extensive CPU usage)

unpacking (none | simple | compress-all | compress-headers; default: simple) - specifies the unpacking mode
none - accept only usual packets
simple - accept usual packets and aggregated packets without compression
compress-headers - accept all packets except those with payload compression
compress-all - accept all packets


Level of packet compression increases like this: none -> simple -> compress-headers -> compress-all.

When router has to send a packet it choses minimum level of packet compression from what its own packing type is set and what other router's unpacking type is set. Same is with aggregated-size setting - minimum value of both ends is actual maximum size of aggregated packet used.

aggregated-size can be bigger than interface MTU if network device allows it to be (i.e., it supports sending and receiving frames bigger than 1514 bytes)


To enable maximal compression on the ether1 interface:

[admin@MikroTik] ip packing> add interface=ether1 packing=compress-all \
\... unpacking=compress-all
[admin@MikroTik] ip packing> print
Flags: X - disabled
  0   ether1    compress-all     compress-all     1500

[admin@MikroTik] ip packing>