Intermediate Queueing, IMQ – „pośrednie urządzenie kolejkujące” używane w systemie operacyjnym Linux.
Jest to wirtualny interfejs wykorzystywany do sterowania ruchem wchodzącym lub wychodzącym z routera, na przykład z pomocą pakietu iproute2. W odróżnieniu od rzeczywistych interfejsów, takich jak eth czy ppp, IMQ:
IMQ umożliwia rozwiązanie dwóch problemów:
Przykład wydruku komendy ifconfig, obrazujący różnice pomiędzy interfejsem rzeczywistym a wirtualnym:
eth0 Link encap:Ethernet HWaddr 00:E0:4C:75:01:E7
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2383775 errors:0 dropped:0 overruns:0 frame:0
TX packets:2583178 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:586768599 (559.5 Mb) TX bytes:1718379338 (1638.7 Mb)
Interrupt:10 Base address:0x1000
imq0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:1500 Metric:1
RX packets:1852185 errors:0 dropped:0 overruns:0 frame:0
TX packets:1852185 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:30
RX bytes:1605531582 (1531.1 Mb) TX bytes:1605531582 (1531.1 Mb)
Koncepcję IMQ opracował i dokonał pierwszej implementacji Martin Devera, następnie prace nad IMQ przejął Patrick McHardy, który potem zrezygnował z jego rozwijania. Obecnie IMQ sporadycznie jest dostosowywane do nowych wersji jądra systemu. Jako że koncepcja ta nie jest do końca poprawna z punktu widzenia inżynierii oprogramowania, nie została i prawdopodobnie nigdy nie zostanie włączona do głównego nurtu systemu - w zamian za to udostępniony został mechanizm Intermediate Functional Block.