⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nwip.h

📁 无线网络仿真工具Glomosim2.03
💻 H
字号:
/* * GloMoSim is COPYRIGHTED software.  Release 2.02 of GloMoSim is available  * at no cost to educational users only. * * Commercial use of this software requires a separate license.  No cost, * evaluation licenses are available for such purposes; please contact * info@scalable-networks.com * * By obtaining copies of this and any other files that comprise GloMoSim2.02, * you, the Licensee, agree to abide by the following conditions and * understandings with respect to the copyrighted software: * * 1.Permission to use, copy, and modify this software and its documentation *   for education and non-commercial research purposes only is hereby granted *   to Licensee, provided that the copyright notice, the original author's *   names and unit identification, and this permission notice appear on all *   such copies, and that no charge be made for such copies. Any entity *   desiring permission to use this software for any commercial or *   non-educational research purposes should contact:  * *   Professor Rajive Bagrodia  *   University of California, Los Angeles  *   Department of Computer Science  *   Box 951596  *   3532 Boelter Hall  *   Los Angeles, CA 90095-1596  *   rajive@cs.ucla.edu * * 2.NO REPRESENTATIONS ARE MADE ABOUT THE SUITABILITY OF THE SOFTWARE FOR ANY *   PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. * * 3.Neither the software developers, the Parallel Computing Lab, UCLA, or any *   affiliate of the UC system shall be liable for any damages suffered by *   Licensee from the use of this software. */// Use the latest version of Parsec if this line causes a compiler error./* * $Id: nwip.h,v 1.39 2001/12/19 21:56:59 jmartin Exp $ * * File: nwip.h * By: Teresa Yan (tyan@cs.ucla.edu) * Objective: IP Network Layer. * Reference: RFC 791 * Date: 2/25/1999. */#ifndef NWIP_H#define NWIP_H#include "ip.h"#include "nwcommon.h"#include "main.h"#include "network.h"#include "ipqueue.h"//  Modifying the network code to add a routing protocol. ////  Routing protocol packets with its specific "IP protocol number"//  can be handled by making a case in the switch in //  "ProcessPacketForMeFromMac" and calling the routing protocol//  routine that handles that packet.////  Routing protcols can send events to themselves (such as //  timer timeout events) and can field them by modifying//  the by modifying the switch statement in //  "HandleRoutingProtocolEvent". // // NetworkIpSetRouterFunction routine allows a routing protocol to // define the routing function.  The routing function is called// by the network layer to ask the routing protocol to // route the packet.  The routing function is given the // packet and its destination.  The routing protocol can// route the packet and return "PacketWasRouted" as TRUE.// Or not route the packet and return FALSE.  If the packet,// was not routed, then the network layer will try to use the// forwarding table or the source route the source route in// the IP header.  This function will also be given packets// for the local node the routing protocols can look at packets// for protocol reasons. In this case, the message should not// be modified and the PacketWasRouted must return FALSE.//typedef void (*RouterFunctionType)(   GlomoNode* node,   Message* msg,   NODE_ADDR destAddr,   BOOL *PacketWasRouted); void NetworkIpSetRouterFunction(   GlomoNode* node,   RouterFunctionType RouterFunctionPtr);#define GET_INTERFACE_FROM_TABLE  0xFFFF//// NetworkIpSetPacketDropNotificationFunction allows a routing protocol// to be notified when the network fails to deliver a packet to// the next hop.  This usual signifies a link break. //typedef void (*PacketDropNotificationFunctionType)(   GlomoNode* node,    const Message * msg,   const NODE_ADDR triedNextHop);void NetworkIpSetPacketDropNotificationFunction(   GlomoNode* node,    PacketDropNotificationFunctionType PacketDropHandlerPtr);////  NetworkIpSendPacketToMacLayer is for the routing protocol defined//  "Routing Function" to send the IP packet down specifying the//  next hop address and interfaceId. Packets are fragmented//  if necessary as they exit the network layer.//void NetworkIpSendPacketToMacLayer(        GlomoNode* node,    Message* msg,    InterfaceIdType interfaceId,   NODE_ADDR nextHop);void NetworkIpSendPacketToMacLayerWithDelay(        GlomoNode* node,    Message* msg,    InterfaceIdType interfaceId,   NODE_ADDR nextHop,   clocktype delay);////  NetworkIpSendRawGlomoMessageToMacLayer is for the routing protocols//  to directly (bypassing routing) send a routing protocol packet//  down to the Mac layer specifying the next hop address and//  interfaceId. The packet receives an IP header and is fragmented//  if necessary as it exits the network layer.//void NetworkIpSendRawGlomoMessageToMacLayer(        GlomoNode* node,   Message* rawMsg,    NODE_ADDR destAddr,   NetworkQueueingPriorityType priority,   unsigned char protocol,   unsigned int ttl,   InterfaceIdType interfaceId,   NODE_ADDR nextHop);   ////  NetworkIpSendRawGlomoMessageToMacLayer is just like//  NetworkIpSendRawGlomoMessageToMacLayer except that the//  action is delayed in simulation time.//void NetworkIpSendRawGlomoMessageToMacLayerWithDelay(        GlomoNode* node,   Message* rawMsg,    NODE_ADDR destAddr,   NetworkQueueingPriorityType priority,   unsigned char protocol,   unsigned int ttl,   InterfaceIdType interfaceId,   NODE_ADDR nextHop,   clocktype delay);////  NetworkIpSendPacketToMacLayerWithNewStrictSourceRoute//  is for the routing protocol defined//  "Routing Function" to send the IP packet down specifying//  a new source route. Packets are fragmented//  if necessary as they exit the network layer.//void NetworkIpSendPacketToMacLayerWithNewStrictSourceRoute(   GlomoNode *node,   Message *msg,    NODE_ADDR newRouteAddresses[],   int numNewRouteAddresses,   BOOL removeExistingRecordedRoute);//// NetworkIpSendNewPacket allows for the routing protocols in the// network layer to send a new routing protocol packet.// The packet follows the usual code path through the network// layer where it is routed and possibly fragmented.// If ttl (time to live) is 0, then it is set to the default TTL value.//void NetworkIpSendNewPacket(   GlomoNode* node,    NODE_ADDR destAddr,   NetworkQueueingPriorityType priority,   unsigned char protocol,   unsigned int ttl,   char* payload, int payloadSize);//// NetworkIpSendNewPacketWithDelay allows for the routing protocols // in the network layer to send a new routing protocol packet with// a time delay. // The packet follows the usual code path through the network// layer where it is routed and possibly fragmented.// If ttl (time to live) is 0, then it is set to the default TTL value.//void NetworkIpSendNewPacketWithDelay(   GlomoNode* node,    NODE_ADDR destAddr,   NetworkQueueingPriorityType priority,   unsigned char protocol,   unsigned int ttl,   char* payload, int payloadSize,   clocktype delay);//// NetworkIpSendRawGlomoMessage allows for the routing protocols in the// network layer to send a new routing protocol packet.// The message sent is a raw GloMoSim WITHOUT an IP header.// The packet follows the usual code path through the network// layer where it is routed and possibly fragmented.// If ttl (time to live) is 0, then it is set to the default TTL value.//void NetworkIpSendRawGlomoMessage(   GlomoNode* node,   Message* rawMsg,    NODE_ADDR destAddr,   NetworkQueueingPriorityType priority,   unsigned char protocol,   unsigned int ttl);//// NetworkIpSendRawGlomoMessageWithDelay allows for the routing// protocols in the network layer to send a new routing protocol packet// with a time delay. The message sent is a raw GloMoSim WITHOUT an // IP header. The packet follows the usual code path through the network// layer where it is routed and possibly fragmented.// If ttl (time to live) is 0, then it is set to the default TTL value.//void NetworkIpSendRawGlomoMessageWithDelay(   GlomoNode* node,   Message* rawMsg,    NODE_ADDR destAddr,   NetworkQueueingPriorityType priority,   unsigned char protocol,   unsigned int ttl,   clocktype delay);// NetworkIpDeleteOutboundPacketsToANode removes all packets in the// queue that are going to the nextHopAddress (for broken links).// if returnToRoutingProtocol flag is true the packets are returned// to the routing protocol via the callback mechanism, otherwise// they are just dropped.void NetworkIpDeleteOutboundPacketsToANode(   GlomoNode* node,   const NODE_ADDR nextHopAddress,   const NODE_ADDR destinationAddress,   const BOOL returnPacketsToRoutingProtocol);                                                //***//*** Mode obsolete by an explicit packet drop function interface.//***// NetworkIpSetMacLayerStatusEventHandlerFunction allows a routing protocol// to receive special MAC Layer status messages sent to the network// layer for the sole purpose of routing protocols that use that // information for routing optimization. // The "Status Event Handler Function" must not write or free the message.//////typedef void (*MacLayerStatusEventHandlerFunctionType)(//   GlomoNode* node, //   const Message * msg);////void NetworkIpSetMacLayerStatusEventHandlerFunction(//   GlomoNode* node, //   MacLayerStatusEventHandlerFunctionType StatusEventHandlerPtr);//// NetworkIpSetPromiscuousMessagePeekFunction allows a routing protocol// to set the function that will be used by the routing protocol// to sneak a "Peek" or "Tap" packets in the MAC layer when// executing in promiscuous mode.  The "Peek Function" must not write// to the message.//typedef void (*PromiscuousMessagePeekFunctionType)(   GlomoNode* node,    const Message * msg);void NetworkIpSetPromiscuousMessagePeekFunction(   GlomoNode* node,    PromiscuousMessagePeekFunctionType PeekFunctionPtr);void NetworkIpRemoveIpHeader(   GlomoNode *node,    Message *msg,    NODE_ADDR* sourceAddress,   NODE_ADDR* destinationAddress,   NetworkQueueingPriorityType* priority,   unsigned char* protocol,   unsigned int* ttl);void SendToUdp(   GlomoNode *node,   Message *msg,   NetworkQueueingPriorityType priority,   NODE_ADDR sourceAddress,   NODE_ADDR destinationAddress);//// AddIpOptionField tacks on a custom "IP option" field to an IP// packet (WARNING: Must be IP packet.).  The option code// that identifies the custom option must not conflict with// standard ones, most notably the source routing code.  The// option size specifies the extra space beyond the standard// 3 byte IP option header.  Currently this value must// satisfy (Size+3 % 4 == 0).  The header fields are moved// by this operation, so watch out for lingering pointers into// the message.void AddIpOptionField(   GlomoNode* node,    Message* msg,   int OptionCode,    int OptionSize); void AddIpHeader(   GlomoNode *node,   Message *msg,   NODE_ADDR destinationAddress,   NetworkQueueingPriorityType priority,   unsigned char protocol,   unsigned int ttl);//---------------------------------------------------------------------------   typedef struct {    NODE_ADDR destAddress;       /* destination address */    InterfaceIdType interfaceId;    /* right now interface Id */    NODE_ADDR nextHopAddress;    /* next hop. */} NetworkForwardingTableRow;typedef struct {    int size;  /* number of entries */    int allocatedSize;    NetworkForwardingTableRow *row;  /* allocation in Init function in Ip */} NetworkForwardingTable;//---------------------------------------------------------------------------/* max. time data can stored in assembly buffer */#define NETWORK_IP_REASS_BUFF_TIMER (15 * SECOND)#define MAX_IP_FRAGMENTS_SIMPLE_CASE        64#define SMALL_REASSEMBLY_BUFFER_SIZE  2048#define REASSEMBLY_BUFFER_EXPANSION_MULTIPLIER  8       //---------------------------------------------------------------------------/* data structure used for assembling fragments */typedef struct {    Message* packetUnderConstruction;   int sizeLimit;   clocktype expirationDate;   unsigned short totalPacketLength;   unsigned short fragmentationSize;   unsigned char  fragmentIsHereBitTable[MAX_IP_FRAGMENTS_SIMPLE_CASE/8];   BOOL endFragmentHasArrived;   unsigned short endFragmentOffset;} IpReassemblyBufferType;typedef struct IpReassemblyBufferListCellStruct {   struct IpReassemblyBufferListCellStruct* nextPtr;   IpReassemblyBufferType reassemblyBuffer;} IpReassemblyBufferListCellType;typedef struct {   IpReassemblyBufferListCellType* firstPtr;   IpReassemblyBufferListCellType* freeListPtr;} IpReassemblyBufferListType;//---------------------------------------------------------------------------typedef struct {    int numPacketsSentToMac;    int numPacketsRoutedForOtherNodes;        int numPacketsDeliveredToThisNode;    int deliveredPacketTtlTotal;        int numNetworkUnreachableDrops;    int numTtlExpirationDrops;} NetworkIpStatsType;typedef struct {    unsigned short              packetIdCounter; // Used for identifying datagram     NetworkForwardingTable      forwardTable;    NetworkRoutingProtocolType  routingProtocolChoice;        void*                       routingProtocol;         RouterFunctionType                     routerFunction;    PacketDropNotificationFunctionType     packetDropHandlerFunction;        PromiscuousMessagePeekFunctionType     promiscuousMessagePeekFunction;        int maxPacketLength;        IpReassemblyBufferListType reassemblyBufferList;        IpOutputQueueType* interfaceQueues[MAX_NUM_INTERFACES];        NetworkIpStatsType stats;} GlomoNetworkIp;    //---------------------------------------------------------------------------              /* functions called by network.pc */void NetworkIpPreInit(GlomoNode *node);void NetworkIpInit(GlomoNode *node, const GlomoNodeInput *nodeInput);void NetworkIpFinalize(GlomoNode *node);void NetworkIpLayer(GlomoNode *node, Message *msg);//---------------------------------------------------------------------------// GloMoSim User modified functions defined in "user_nwip.pc".void NetworkIpUserProtocolInit(   GlomoNode *node,   const GlomoNodeInput *nodeInput,   const char* routingProtocolString,    NetworkRoutingProtocolType* routingProtocolChoice,   void** routingProtocolData);      void NetworkIpUserHandleProtocolEvent(GlomoNode* node, Message* msg);void NetworkIpUserHandleProtocolPacket(   GlomoNode* node,    Message* msg,    unsigned char ipProtocol,   NODE_ADDR sourceAddress,   NODE_ADDR destinationAddress,    int ttl);void NetworkIpUserProtocolFinalize(   GlomoNode* node,    int userProtocolNumber);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -