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

73 lines
2.2 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
*/
using NetStack.Common;
using System;
using System.Collections.Specialized;
#if !SINGULARITY
using System.Net;
#endif
using System.Net.IP;
using Drivers.Net;
namespace NetStack.Runtime
{
/**
* This interface represents a networking protocol.
* It should be implemented by protocol implementations.
* Notice: Dynamic loadable protocols should implement a
* default constructor.
*/
public interface IProtocol : INetModule
{
/**
* A protocol's handler for PDU reception,
* @param pkt - the arrived packet argument, the internal packet is
* stripped from all lower layer headers.
*
* @return NetStatus - the status of this invocation
*
* NOTICE: this protocol must set the internal: NetPacket.ActivePos for
* next level protocol.
*/
NetStatus OnProtocolReceive(NetPacket! pkt);
// A specific Protocol's send routine
// @param pkt - a packet to send
// @return NetStatus - the status of this invocation
NetStatus OnProtocolSend(NetPacket! pkt);
// create a protocol specific session
Session CreateSession();
// set protocol specific data
// @return NetStatus - the status of this invocation
NetStatus SetProtocolSpecific(ushort opcode, byte[]! data);
// get protocol specific data
// @return NetStatus - the status of this invocation
NetStatus GetProtocolSpecific(ushort opcode, out byte[] data);
// get the protocol ID (Protocols.IPFormat.Protocol or EthernetFormat.Proto)
ushort GetProtocolID();
}
public interface IFlowAware
{
// find this protocol's session for a given packet
Session[]! GetSessions(NetPacket! packet);
}
}