X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FIPStack%2Finterface.c;h=c6f55ba90977ddec0efc0e774e5acea5b01bec69;hb=8051546ad5894e093211d2ec69dde6b99cdaa71d;hp=445e5892f9f112266c47ab57b40eed765644fa01;hpb=94ecc5441605ad5151e625457531e7f90470db31;p=tpg%2Facess2.git diff --git a/Modules/IPStack/interface.c b/Modules/IPStack/interface.c index 445e5892..c6f55ba9 100644 --- a/Modules/IPStack/interface.c +++ b/Modules/IPStack/interface.c @@ -52,6 +52,11 @@ tInterface *gIP_Interfaces = NULL; tInterface *gIP_Interfaces_Last = NULL; tSocketFile *gIP_FileTemplates; + +tAdapter gIP_LoopAdapter = { + DeviceLen: 8, + Device: "LOOPBACK" + }; tMutex glIP_Adapters; tAdapter *gIP_Adapters = NULL; int giIP_NextIfaceId = 1; @@ -531,6 +536,37 @@ tAdapter *IPStack_GetAdapter(const char *Path) ENTER("sPath", Path); + // Check for loopback + if( strcmp(Path, "LOOPBACK") == 0 ) + { + // Initialise if required + if( gIP_LoopAdapter.DeviceFD == 0 ) + { + dev = &gIP_LoopAdapter; + + dev->NRef = 1; + dev->DeviceLen = 8; + + dev->DeviceFD = VFS_Open( "/Devices/fifo/anon", VFS_OPENFLAG_READ|VFS_OPENFLAG_WRITE ); + if( dev->DeviceFD == -1 ) { + Log_Warning("IPStack", "Unable to open FIFO '/Devices/fifo/anon' for loopback"); + return NULL; + } + + dev->MacAddr.B[0] = 'A'; + dev->MacAddr.B[1] = 'c'; + dev->MacAddr.B[2] = 'e'; + dev->MacAddr.B[3] = 's'; + dev->MacAddr.B[4] = 's'; + dev->MacAddr.B[5] = '2'; + + // Start watcher + Link_WatchDevice( dev ); + } + LEAVE('p', &gIP_LoopAdapter); + return &gIP_LoopAdapter; + } + Mutex_Acquire( &glIP_Adapters ); // Check if this adapter is already open