27 #include "ns3/unused.h"    28 #include "ns3/node-container.h"    45   static TypeId tid = 
TypeId (
"ns3::RocketfuelTopologyReader")
    47     .SetGroupName (
"TopologyReader")
    69 #define REGMATCH_MAX 16    75 #define SPACE "[ \t]+"    77 #define MAYSPACE "[ \t]*"    81 #define ROCKETFUEL_MAPS_LINE \    82   START "(-*[0-9]+)" SPACE "(@[?A-Za-z0-9,+]+)" SPACE \    83   "(\\+)*" MAYSPACE "(bb)*" MAYSPACE \    84   "\\(([0-9]+)\\)" SPACE "(&[0-9]+)*" MAYSPACE \    85   "->" MAYSPACE "(<[0-9 \t<>]+>)*" MAYSPACE \    86   "(\\{-[0-9\\{\\} \t-]+\\})*" SPACE \    87   "=([A-Za-z0-9.!-]+)" SPACE "r([0-9])" \    91 #define ROCKETFUEL_WEIGHTS_LINE \    92   START "([^ \t]+)" SPACE "([^ \t]+)" SPACE "([0-9.]+)" MAYSPACE END   106                std::vector <std::string>::size_type neighListSize,
   107                std::string & name, 
int radius)
   110   NS_LOG_INFO (
"Load Node[" << uid << 
"]: location: " << loc << 
" dns: " << dns
   111                             << 
" bb: " << bb << 
" neighbors: " << neighListSize
   112                             << 
"(" << 
"%d" << 
") externals: \"%s\"(%d) "   113                             << 
"name: " << name << 
" radius: " << radius);
   127   unsigned int num_neigh = 0;
   129   std::vector <std::string> neigh_list;
   145   num_neigh_s = ::atoi (argv[4]);
   149       NS_LOG_WARN (
"Negative number of neighbors given");
   153       num_neigh = num_neigh_s;
   160       char *stringp = argv[6];
   161       while ((nbr = strsep (&stringp, 
" \t")) != NULL)
   163           nbr[strlen (nbr) - 1] = 
'\0';
   164           neigh_list.push_back (nbr + 1);
   167   if (num_neigh != neigh_list.size ())
   169       NS_LOG_WARN (
"Given number of neighbors = " << num_neigh << 
" != size of neighbors list = " << neigh_list.size ());
   184   radius = ::atoi (&argv[9][1]);
   190   PrintNodeInfo (uid, loc, dns, bb, neigh_list.size (), name, radius);
   197           Ptr<Node> tmpNode = CreateObject<Node> ();
   203       for (uint32_t i = 0; i < neigh_list.size (); ++i)
   205           nuid = neigh_list[i];
   214               Ptr<Node> tmpNode = CreateObject<Node> ();
   242   double v = strtod (argv[2], &endptr); 
   251   if (!sname.empty () && !tname.empty ())
   255           Ptr<Node> tmpNode = CreateObject<Node> ();
   263           Ptr<Node> tmpNode = CreateObject<Node> ();
   273           if ((iter->GetFromNode () == 
m_nodeMap[tname])
   274               && (iter->GetToNode () == 
m_nodeMap[sname]))
   306       regerror (ret, ®ex, errbuf, 
sizeof (errbuf));
   309   ret = regexec (®ex, line, 
REGMATCH_MAX, regmatch, 0);
   310   if (ret != REG_NOMATCH)
   321       regerror (ret, ®ex, errbuf, 
sizeof (errbuf));
   324   ret = regexec (®ex, line, 
REGMATCH_MAX, regmatch, 0);
   325   if (ret != REG_NOMATCH)
   339   std::ifstream topgen;
   343   std::istringstream lineBuffer;
   349   if (!topgen.is_open ())
   355   while (!topgen.eof ())
   366       getline (topgen, line);
   367       buf = (
char *)line.c_str ();
   387               regerror (ret, ®ex, errbuf, 
sizeof (errbuf));
   393           if (ret == REG_NOMATCH)
   395               NS_LOG_WARN (
"match failed (maps file): %s" << buf);
   405               regerror (ret, ®ex, errbuf, 
sizeof (errbuf));
   411           if (ret == REG_NOMATCH)
   413               NS_LOG_WARN (
"match failed (weights file): %s" << buf);
   425           if (regmatch[i].rm_so == -1)
   431               line[regmatch[i].rm_eo] = 
'\0';
   432               argv[i - 1] = &line[regmatch[i].rm_so];
   447           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. 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
#define ROCKETFUEL_MAPS_LINE
Regex expression matching a MAP 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. 
ns3::RocketfuelTopologyReader declaration. 
void AddLink(Link link)
Adds a link to the topology. 
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. 
enum RF_FileType GetFileType(const char *buf)
Classifies the file type according to its content. 
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. 
ConstLinksIterator LinksEnd(void) const
Returns an iterator to the the last link in this block. 
virtual ~RocketfuelTopologyReader()
#define ROCKETFUEL_WEIGHTS_LINE
Regex expression matching a WEIGHT 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. 
#define REGMATCH_MAX
Maximum nuber of matches in a regex query. 
virtual NodeContainer Read(void)
Main topology reading function. 
RF_FileType
Enum of the possible file types. 
std::string GetFileName(void) const
Returns the input file name. 
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. 
ConstLinksIterator LinksBegin(void) const
Returns an iterator to the the first link in this block. 
TypeId SetParent(TypeId tid)
Set the parent TypeId.