X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FIPStack%2Fmain.c;h=8e3810d9ceefe92d94d74dc92fde124c8d68052c;hb=e6eafcb86732068e2094f04a2452098c13256336;hp=577cd38ab14505e99e50b2141fb192f80d1114fc;hpb=8c721d1069e9c0c769b847e9903d83b99d1acdfe;p=tpg%2Facess2.git diff --git a/Modules/IPStack/main.c b/Modules/IPStack/main.c index 577cd38a..8e3810d9 100644 --- a/Modules/IPStack/main.c +++ b/Modules/IPStack/main.c @@ -71,10 +71,15 @@ int IPStack_Install(char **Arguments) // - is a condensed hexadecimal stream (in big endian) // (E.g. 0A000201 for 10.0.2.1 IPv4) // - is the number of subnet bits (E.g. 24 for an IPv4 Class C) + // Example: /Devices/ne2k/0,4,0A00020A,24 + + // I could also define routes using ,,, + // Example: 1,00000000,0,0A000201 } } - gIP_LoopInterface.Adapter = IPStack_GetAdapter("/Devices/fifo/anon"); + // Initialise loopback interface + gIP_LoopInterface.Adapter = IPStack_GetAdapter("LOOPBACK"); DevFS_AddDevice( &gIP_DriverInfo ); @@ -88,13 +93,19 @@ int IPStack_GetAddressSize(int AddressType) { switch(AddressType) { - default: + case -1: // -1 = maximum + return sizeof(tIPv6); + case AF_NULL: return 0; + case AF_INET4: return sizeof(tIPv4); case AF_INET6: return sizeof(tIPv6); + + default: + return 0; } } @@ -111,6 +122,8 @@ int IPStack_CompareAddress(int AddressType, void *Address1, void *Address2, int if( CheckBits < 0 ) CheckBits = 0; if( CheckBits > size*8 ) CheckBits = size*8; + if( CheckBits == 0 ) return 1; // /0 matches anythin0 + // Check first bits/8 bytes if( memcmp(Address1, Address2, CheckBits/8) != 0 ) return 0; @@ -124,3 +137,29 @@ int IPStack_CompareAddress(int AddressType, void *Address1, void *Address2, int return 0; } + +const char *IPStack_PrintAddress(int AddressType, void *Address) +{ + switch( AddressType ) + { + case 4: { + static char ret[4*3+3+1]; + Uint8 *addr = Address; + sprintf(ret, "%i.%i.%i.%i", addr[0], addr[1], addr[2], addr[3]); + return ret; + } + + case 6: { + static char ret[8*4+7+1]; + Uint16 *addr = Address; + sprintf(ret, "%x:%x:%x:%x:%x:%x:%x:%x", + addr[0], addr[1], addr[2], addr[3], + addr[4], addr[5], addr[6], addr[7] + ); + return ret; + } + + default: + return ""; + } +}