00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "simlpy/interpreter_defs.h"
00032 #include "simlpy/interpreter_hooks.h"
00033
00034 #include <iostream>
00035 #include "PrefixRoutingEntity.h"
00036 #include "WrapNode.h"
00037 #include "WrapLink.h"
00038 #include "parsers.h"
00039 #include "dtn/PrefixRoute.h"
00040 #include "simlpy/SimulationException.h"
00041
00042 PrefixRoutingEntity::PrefixRoutingEntity() :
00043 RoutingEntity()
00044 {
00045 m_etable = new DTN::PrefixRoutingTable;
00046 m_table = m_etable;
00047 }
00048
00049 PrefixRoutingEntity::~PrefixRoutingEntity()
00050 {
00051 }
00052
00053 Entity*
00054 PrefixRoutingEntity::create() const
00055 {
00056 return new PrefixRoutingEntity;
00057 }
00058
00059 void
00060 PrefixRoutingEntity::configure( const ArgList& args )
00061 {
00062 unsigned int nargs = args.size();
00063 if ( nargs < 3 )
00064 {
00065 std::cerr << "config() takes at least 3 arguments ("
00066 << nargs << " given)"
00067 << std::endl;
00068 throw SimulationException( __FILE__ , __LINE__ );
00069 }
00070 std::string command = parse_string(args[0]);
00071 if ( "route" == command )
00072 {
00073 std::string prefixString = parse_string(args[1]);
00074 DTN::ByteString prefix;
00075 for ( unsigned int i = 0 ; i < prefixString.length() ; ++i )
00076 {
00077 prefix += prefixString[i];
00078 }
00079
00080 WrapLink* link = parse_link(args[2]);
00081 if ( 0 == link )
00082 {
00083 std::cerr << "The second argument of config('route',prefix,link) "
00084 << "must be a subnet prefix and the third must be a link"
00085 << std::endl;
00086 throw SimulationException( __FILE__ , __LINE__ );
00087 }
00088
00089 DTN::PrefixRoute* r = new DTN::PrefixRoute( prefix, &(link->link()) );
00090 m_etable->addRoute( r );
00091 }
00092 else
00093 {
00094 std::cerr << "Unrecognized configuration option: " << command
00095 << std::endl;
00096 throw SimulationException( __FILE__ , __LINE__ );
00097 }
00098 }