A következokben látni lehet, hogy egy hálózatoknál is használható
multiplexer konfigurációt hogyan rakhatunk össze. A hálózatoknál gyakori
probléma az, hogy egy csomópontban levo gépben két (különbözo) hálózati
kártya van (ez a gép köt össze két alhálózatot). Például legyen az egyik
egy X.25, a másik pedig egy Ethernet kártya. Ekkor az internet protokoll
feladata az adatok megfelelo hálózati kártyára küldése, attól függoen,
hogy az egyes adatcsomagok rendeltetési helye melyik alhálózatban van.
Itt a következoket csinálhatjuk : meg kell nyitni az Ethernet és az X.25
kártya driverét (ezek természetesen STREAMS device driverek; nevük
legyen rendre /dev/ethernet ill. /dev/x25), és meg
kell nyitni az internet protokoll multiplexer drivert is (ennek neve
legyen a példában /dev/ip). Ezután az IP multiplexert össze
kell kapcsolni ( I_LINK
ioctl hívással) a fenti két másik
driverrel. Ennek a C nyelvu kódja a következo :
#include <stropts.h> /* Konstansok miatt kell */
#inlcude <fcntl.h>
main() /* STREAMS multiplexer config. */
{
int fdether,fdx25,fdip;
int muxx25,muxether;
/* Driverek megnyitasa : */
if ((fdether=open("/dev/ethernet",O_RDWR)) == -1 )
{ perror("/dev/ethernet"); exit(1); }
if ((fdx25=open("/dev/x25",O_RDWR)) == -1 )
{ perror("/dev/x25"); exit(1); }
if ((fdip=open("/dev/ip",O_RDWR)) == -1 )
{ perror("/dev/ip"); exit(1); }
/* Multiplexer kiepitese : */
if (muxx25=ioctl(fdip,I_LINK,fdx25) < 0)
{ perror("I_LINK ioctl sikertelen"); exit(2); }
if (muxether=ioctl(fdip,I_LINK,fdether) < 0)
{ perror("I_LINK ioctl sikertelen"); exit(2); }
/* Ezutan az also driverek filedesc.-jai lezarhatok */
close(fdether);
close(fdx25);
pause(); /* Mindig fusson, nehogy a rendszer
lezarja a fileokat */
/* Ez nem kell most :
if (ioctl(fdip,I_UNLINK,muxether) < 0)
{ perror("I_UNLINK ioctl sikertelen"); exit(2); }
if (ioctl(fdip,I_UNLINK,muxx25) < 0)
{ perror("I_UNLINK ioctl sikertelen"); exit(2); }
*/
}
Az összelinkelés után az alsó streamek filedeszkriptorjaikra vonatkozó
(ez esetben az fdx25 és az fdether) bármilyen filemuvelet (a close
kivételével) hibával fog befejezodni, vagyis a deszkriptorok
használhatatlanok lesznek, ezért érdemes ezeket lezárni. Ennek az is a
következménye, hogy ha STREAMS modulokat akarunk például az fdx25
filedeszkriptorhoz tartozó streamre rakni, akkor azt még az
összelinkelés elott kell elintézni.
Ha ezután az IP drivert egy másik programból megnyitjuk és
adatcsomagokat írunk a rá vonatkozó filedeszkriptorra, akkor az IP
driver ezeket az adatokat szétosztja a két alsó driverre. Természetesen
az IP drivert úgy kell megírni, hogy felismerje az adatcsomagokból azok
rendeltetési helyét.