// === GLOBALS ===
tIPStack_AdapterType gNativeNIC_AdapterType = {
.Name = "NativeNIC",
- .Type = 0, // TODO: Differentiate differnet wire protos and speeds
- .Flags = 0, // TODO: IP checksum offloading, MAC checksum offloading etc
+ .Type = 0,
+ .Flags = 0,
.SendPacket = NativeNic_SendPacket,
.WaitForPacket = NativeNic_WaitForPacket
};
int NativeNic_AddDev(char *DevDesc)
{
Uint8 macaddr[6];
+ // Parse descriptor into mac address and path
+ // 123456789ABC:tun:ifname
+ // 123456789ABC:unix:/path
+ // 123456789ABC:file:/path
+ // 123456789ABC:tcp:host_desc
char *colonpos = strchr(DevDesc, ':');
if( !colonpos )
return -1;
if( UnHex(macaddr, 6, DevDesc) != 6 )
return -1;
- void *ptr = NetTest_OpenTap(colonpos+1);
+
+ char *class = colonpos + 1;
+ colonpos = strchr(class, ':');
+ void *ptr;
+ if( strncmp(class, "tun:", 4) == 0 ) {
+ ptr = NetTest_OpenTap(colonpos+1);
+ }
+ else if( strncmp(class, "unix:", 5) == 0 ) {
+ ptr = NetTest_OpenUnix(colonpos+1);
+ }
+ else {
+ Log_Warning("NIC", "Unknown opener '%.*s'", colonpos-class, class);
+ ptr = NULL;
+ }
if( !ptr )
return 1;
IPStack_Adapter_Add(&gNativeNIC_AdapterType, ptr, macaddr);
tIPStackBuffer *ret = IPStack_Buffer_CreateBuffer(1);
IPStack_Buffer_AppendSubBuffer(ret, len, 0, buf, NativeNic_int_FreePacket, Ptr);
+
+ Debug_HexDump("NativeNic: RX", buf, len);
+
return ret;
}
// Serialise into stack
char buf[len];
IPStack_Buffer_GetData(Buffer, buf, len);
+
+ Debug_HexDump("NativeNic: TX", buf, len);
NetTest_WritePacket(Ptr, len, buf);
return 0;