📄 mhenginem.nc
字号:
/* * Copyright (c) 2007 Romain Thouvenin <romain.thouvenin@gmail.com> * Published under the terms of the GNU General Public License (GPLv2). */#include "routing.h"/** * MHEngineM - Implements a simple transport protocol, which is * nothing more than AM on top of the existing AM stack. * * @author Romain Thouvenin */module MHEngineM { provides interface RouteSelect; uses { interface AMPacket as MHPacket; interface AMPacket; interface RoutingTable; }}implementation { rt_info_t info; command fw_action_t RouteSelect.selectRoute(message_t * msg, addr_t * destination, uint8_t * am_type){ dbg("mhe", "MHE: Somebody wants a route, let's see...\n"); if( call MHPacket.isForMe(msg) || (destination && (*destination == call MHPacket.address())) ){ *am_type = call MHPacket.type(msg); return FW_RECEIVE; } else { error_t e; if(destination) e = call RoutingTable.getRoute(*destination, &info); else e = call RoutingTable.getForwardingRoute(call MHPacket.destination(msg), &info); if(e == SUCCESS){ dbg("mhe", "MHE: I've selected a route to %u through %u.\n", info.address, info.nexthop); call AMPacket.setDestination(msg, info.nexthop); if(destination){ call MHPacket.setType(msg, *am_type); call MHPacket.setDestination(msg, *destination); call MHPacket.setSource(msg, call MHPacket.address()); } else { *am_type = call MHPacket.type(msg); } return FW_SEND; } else if(e == EBUSY){ dbg("mhe", "MHE: No route is available for now.\n"); return FW_WAIT; } else { dbg("mhe", "MHE: I'm discarding the message.\n"); return FW_DISCARD; } } } event void RoutingTable.evicted(const rt_info_t * rt_info, reason_t r){}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -