85 lines
3.1 KiB
C#
85 lines
3.1 KiB
C#
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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];
|
|
}
|
|
}
|
|
}
|
|
}
|