28 #include "ns3/unused.h" 
   39   static TypeId tid = 
TypeId (
"ns3::RocketfuelTopologyReader")
 
   41     .SetGroupName (
"TopologyReader")
 
   62 #define REGMATCH_MAX 16 
   66 #define SPACE "[ \t]+" 
   67 #define MAYSPACE "[ \t]*" 
   69 #define ROCKETFUEL_MAPS_LINE \ 
   70   START "(-*[0-9]+)" SPACE "(@[?A-Za-z0-9,+]+)" SPACE \ 
   71   "(\\+)*" MAYSPACE "(bb)*" MAYSPACE \ 
   72   "\\(([0-9]+)\\)" SPACE "(&[0-9]+)*" MAYSPACE \ 
   73   "->" MAYSPACE "(<[0-9 \t<>]+>)*" MAYSPACE \ 
   74   "(\\{-[0-9\\{\\} \t-]+\\})*" SPACE \ 
   75   "=([A-Za-z0-9.!-]+)" SPACE "r([0-9])" \ 
   78 #define ROCKETFUEL_WEIGHTS_LINE \ 
   79   START "([^ \t]+)" SPACE "([^ \t]+)" SPACE "([0-9.]+)" MAYSPACE END 
   93                std::vector <std::string>::size_type neighListSize,
 
   94                std::string & name, 
int radius)
 
   97   NS_LOG_INFO (
"Load Node[" << uid << 
"]: location: " << loc << 
" dns: " << dns
 
   98                             << 
" bb: " << bb << 
" neighbors: " << neighListSize
 
   99                             << 
"(" << 
"%d" << 
") externals: \"%s\"(%d) " 
  100                             << 
"name: " << name << 
" radius: " << radius);
 
  114   unsigned int num_neigh = 0;
 
  116   std::vector <std::string> neigh_list;
 
  132   num_neigh_s = ::atoi (argv[4]);
 
  136       NS_LOG_WARN (
"Negative number of neighbors given");
 
  140       num_neigh = num_neigh_s;
 
  147       char *stringp = argv[6];
 
  148       while ((nbr = strsep (&stringp, 
" \t")) != NULL)
 
  150           nbr[strlen (nbr) - 1] = 
'\0';
 
  151           neigh_list.push_back (nbr + 1);
 
  154   if (num_neigh != neigh_list.size ())
 
  156       NS_LOG_WARN (
"Given number of neighbors = " << num_neigh << 
" != size of neighbors list = " << neigh_list.size ());
 
  171   radius = ::atoi (&argv[9][1]);
 
  177   PrintNodeInfo (uid, loc, dns, bb, neigh_list.size (), name, radius);
 
  184           Ptr<Node> tmpNode = CreateObject<Node> ();
 
  190       for (uint32_t i = 0; i < neigh_list.size (); ++i)
 
  192           nuid = neigh_list[i];
 
  201               Ptr<Node> tmpNode = CreateObject<Node> ();
 
  229   double v = strtod (argv[2], &endptr); 
 
  238   if (!sname.empty () && !tname.empty ())
 
  242           Ptr<Node> tmpNode = CreateObject<Node> ();
 
  250           Ptr<Node> tmpNode = CreateObject<Node> ();
 
  260           if ((iter->GetFromNode () == 
m_nodeMap[tname])
 
  261               && (iter->GetToNode () == 
m_nodeMap[sname]))
 
  293       regerror (ret, ®ex, errbuf, 
sizeof (errbuf));
 
  296   ret = regexec (®ex, line, 
REGMATCH_MAX, regmatch, 0);
 
  297   if (ret != REG_NOMATCH)
 
  308       regerror (ret, ®ex, errbuf, 
sizeof (errbuf));
 
  311   ret = regexec (®ex, line, 
REGMATCH_MAX, regmatch, 0);
 
  312   if (ret != REG_NOMATCH)
 
  326   std::ifstream topgen;
 
  330   std::istringstream lineBuffer;
 
  336   if (!topgen.is_open ())
 
  342   while (!topgen.eof ())
 
  353       getline (topgen, line);
 
  354       buf = (
char *)line.c_str ();
 
  374               regerror (ret, ®ex, errbuf, 
sizeof (errbuf));
 
  380           if (ret == REG_NOMATCH)
 
  382               NS_LOG_WARN (
"match failed (maps file): %s" << buf);
 
  392               regerror (ret, ®ex, errbuf, 
sizeof (errbuf));
 
  398           if (ret == REG_NOMATCH)
 
  400               NS_LOG_WARN (
"match failed (weights file): %s" << buf);
 
  412           if (regmatch[i].rm_so == -1)
 
  418               line[regmatch[i].rm_eo] = 
'\0';
 
  419               argv[i - 1] = &line[regmatch[i].rm_so];
 
  434           NS_LOG_WARN (
"Unsupported file format (only Maps/Weights are supported)");
 
RocketfuelTopologyReader()
 
static TypeId GetTypeId(void)
Get the type ID. 
 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
 
ConstLinksIterator LinksBegin(void) const 
Returns an iterator to the the first link in this block. 
 
std::string GetFileName(void) const 
Returns the input file name. 
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
#define ROCKETFUEL_MAPS_LINE
 
#define NS_UNUSED(x)
Mark a local variable as unused. 
 
NodeContainer GenerateFromMapsFile(int argc, char *argv[])
Topology read function from a file containing the nodes map. 
 
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
 
void AddLink(Link link)
Adds a link to the topology. 
 
enum RF_FileType GetFileType(const char *)
Classifies the file type according to its content. 
 
NodeContainer GenerateFromWeightsFile(int argc, char *argv[])
Topology read function from a file containing the nodes weights. 
 
Inner class holding the details about a link between two nodes. 
 
Interface for input file readers management. 
 
int m_nodesNumber
Number of nodes. 
 
static void PrintNodeInfo(std::string &uid, std::string &loc, bool dns, bool bb, std::vector< std::string >::size_type neighListSize, std::string &name, int radius)
Print node info. 
 
virtual ~RocketfuelTopologyReader()
 
#define ROCKETFUEL_WEIGHTS_LINE
 
std::map< std::string, Ptr< Node > > m_nodeMap
Map of the nodes (name, node). 
 
std::list< Link >::const_iterator ConstLinksIterator
Constant iterator to the list of the links. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
keep track of a set of node pointers. 
 
int m_linksNumber
Number of links. 
 
RF_FileType
Enum of the possible file types. 
 
virtual NodeContainer Read(void)
Main topology reading function. 
 
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container. 
 
Topology file reader (Rocketfuel-format type). 
 
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN. 
 
a unique identifier for an interface. 
 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
 
ConstLinksIterator LinksEnd(void) const 
Returns an iterator to the the last link in this block.