singrdk/base/Services/NetStack/Runtime/NetStatus.cs

85 lines
3.1 KiB
C#
Raw Normal View History

2008-03-05 09:52:00 -05:00
///////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
/**
* Microsoft Research, Cambridge
* author: Yaron Weinsberg, Richard Black
*/
namespace NetStack
{
namespace Runtime
{
public struct NetStatus
{
// the error code
public Code errorCode;
// ctor
public NetStatus(Code c)
{
errorCode=c;
}
// create an implicit cast operator
public static implicit operator NetStatus(Code c)
{
return new NetStatus(c);
}
// create an implicit cast operator
public static implicit operator Code(NetStatus s)
{
return s.errorCode;
}
// networking stack error codes
public enum Code : byte
{
// nice codes...
RT_OK = 0x00, // runtime is happy
RT_DROP_NO_HANDLER = 0x01, // packet dropped, type handler doesn't exist
PROTOCOL_OK = 0x02, // protocol is finished, packet can be recycled
PROTOCOL_PROCESSING = 0x03, // more work to be done (prob by other protocols)
PROTOCOL_DROP_CHKSUM = 0x04, // protocol drops a packet - checksum
RT_DROP_WRONG_DEST = 0x05, // destination is wrong + we are not gateway
RT_DROP_NO_ROUTE = 0x06, // no route to the destination, drop it
RT_DROP_TTL_EXPIRED = 0x07, // ttl has been expired, drop the packet
PROTOCOL_DROP_NO_BUF = 0x08, // no buffer available to accept the packet
PROTOCOL_DROP_ERROR = 0x09, // general drop error
RT_RETRY_PENDING_ARP = 0x10, // retry sending due to pending ARP resolution
// error codes...
RT_ERROR = 0x80, // runtime general error
PROTOCOL_PANIC = 0xFF // panic - shutdown!
}
public static string[]
ErrorMap = new string[] {
"RuntimeError",
"UndefinderProtocol"
};
public static bool SUCCEEDED(NetStatus.Code code)
{
return ((((byte)code)&0x80)==0);
}
public static bool FAILED(NetStatus.Code code)
{
return (!SUCCEEDED(code));
}
public static string ErrorToString(NetStatus.Code errorCode)
{
return ErrorMap[((byte)errorCode)&0x7F];
}
}
}
}