Initial commit
This commit is contained in:
commit
7a696fb1ac
25 files changed
+1249
No files matched your search
@@ -0,0 +1,26 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
|
||||
#include "ns3/core-module.h"
|
||||
#include "ns3/sync-helper.h"
|
||||
|
||||
using namespace ns3;
|
||||
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
bool verbose = true;
|
||||
|
||||
CommandLine cmd;
|
||||
cmd.AddValue ("verbose", "Tell application to log if true", verbose);
|
||||
|
||||
cmd.Parse (argc,argv);
|
||||
|
||||
/* ... */
|
||||
|
||||
Simulator::Run ();
|
||||
Simulator::Destroy ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
|
||||
|
||||
def build(bld):
|
||||
obj = bld.create_ns3_program('sync-example', ['sync'])
|
||||
obj.source = 'sync-example.cc'
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
@@ -0,0 +1,42 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_APP_H
|
||||
#define SYNC_APP_H
|
||||
|
||||
namespace ns3
|
||||
{
|
||||
|
||||
namespace Sync
|
||||
{
|
||||
|
||||
class App
|
||||
{
|
||||
public:
|
||||
private:
|
||||
};
|
||||
|
||||
} // Sync
|
||||
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_APP_H
|
||||
@@ -0,0 +1,49 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#include "sync-ccnx-name-info.h"
|
||||
#include "ns3/ccnx-name-components.h"
|
||||
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
namespace ns3 {
|
||||
namespace Sync {
|
||||
|
||||
|
||||
CcnxNameInfo::CcnxNameInfo (Ptr<const CcnxNameComponents> name)
|
||||
: m_name (name)
|
||||
{
|
||||
}
|
||||
|
||||
CcnxNameInfo::~CcnxNameInfo ()
|
||||
{
|
||||
}
|
||||
|
||||
std::string
|
||||
CcnxNameInfo::toString () const
|
||||
{
|
||||
return boost::lexical_cast<std::string> (*m_name);
|
||||
}
|
||||
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
@@ -0,0 +1,56 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_CCNX_NAME_INFO_H
|
||||
#define SYNC_CCNX_NAME_INFO_H
|
||||
|
||||
#include "sync-name-info.h"
|
||||
#include "ns3/ptr.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
class CcnxNameComponents;
|
||||
|
||||
namespace Sync {
|
||||
|
||||
class CcnxNameInfo : public NameInfo
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor
|
||||
* @param name full (routable) name for the participant
|
||||
*/
|
||||
CcnxNameInfo (Ptr<const CcnxNameComponents> name);
|
||||
virtual ~CcnxNameInfo ();
|
||||
|
||||
// from NameInfo
|
||||
virtual std::string
|
||||
toString () const;
|
||||
|
||||
private:
|
||||
Ptr<const CcnxNameCompnents> m_name;
|
||||
};
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_CCNX_NAME_INFO_H
|
||||
@@ -0,0 +1,21 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
@@ -0,0 +1,89 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_DIFF_LEAF_H
|
||||
#define SYNC_DIFF_LEAF_H
|
||||
|
||||
#include "sync-leaf.h"
|
||||
|
||||
namespace ns3 {
|
||||
namespace Sync {
|
||||
|
||||
/**
|
||||
* @ingroup sync
|
||||
* @brief Annotation for SYNC leaf
|
||||
*/
|
||||
enum Operation
|
||||
{
|
||||
UPDATE, ///< @brief Leaf was added or updated
|
||||
REMOVE ///< @brief Leaf was removed
|
||||
};
|
||||
|
||||
/**
|
||||
* @ingroup sync
|
||||
* @brief Annotated SYNC leaf
|
||||
*/
|
||||
class DiffLeaf : public Leaf
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor to create an UPDATE diff leaf
|
||||
* @param info Smart pointer to leaf's name
|
||||
* @param seq Initial sequence number of the pointer
|
||||
*/
|
||||
DiffLeaf (boost::shared_ptr<const NameInfo> info, const SeqNo &seq)
|
||||
: Leaf (info, seq)
|
||||
, m_op (Operation::UPDATE)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Constructor to create an REMOVE diff leaf
|
||||
* @param info Smart pointer to leaf's name
|
||||
*
|
||||
* This constructor creates a leaf with phony sequence number
|
||||
* with 0 session ID and 0 sequence number
|
||||
*/
|
||||
DiffLeaf (boost::shared_ptr<const NameInfo> info)
|
||||
: Leaf (info, SeqNo (0,0))
|
||||
, m_op (Operation::REMOVE)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~DiffLeaf ()
|
||||
{
|
||||
}
|
||||
|
||||
Operation
|
||||
getOperation () const
|
||||
{
|
||||
return m_op;
|
||||
}
|
||||
|
||||
private:
|
||||
Operation m_op;
|
||||
};
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_DIFF_LEAF_H
|
||||
@@ -0,0 +1,85 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#include "sync-diff-state.h"
|
||||
|
||||
#include <boost/make_shared.hpp>
|
||||
|
||||
using namespace boost;
|
||||
|
||||
namespace ns3 {
|
||||
namespace Sync {
|
||||
|
||||
DiffState::DiffState ()
|
||||
: m_next (0)
|
||||
{
|
||||
}
|
||||
|
||||
DiffState::~DiffState ()
|
||||
{
|
||||
}
|
||||
|
||||
DiffStatePtr
|
||||
DiffState::diff () const
|
||||
{
|
||||
DiffStatePtr ret = make_shared<DiffState> ();
|
||||
|
||||
DiffState *state = m_next;
|
||||
while (state != 0)
|
||||
{
|
||||
*ret += *state;
|
||||
state = state->m_next;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
DiffState &
|
||||
DiffState::operator += (const DiffState &state)
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
// from State
|
||||
virtual void
|
||||
DiffState::update (NameInfoConstPtr info, const SeqNo &seq)
|
||||
{
|
||||
LeafContainer::iterator item = m_leafs.find (info);
|
||||
if (item != m_leafs.end ())
|
||||
m_leafs.remove (item);
|
||||
|
||||
m_leafs.insert (make_shared<DiffLeaf> (info, cref (seq)));
|
||||
}
|
||||
|
||||
virtual void
|
||||
DiffState::remove (NameInfoConstPtr info)
|
||||
{
|
||||
LeafContainer::iterator item = m_leafs.find (info);
|
||||
if (item != m_leafs.end ())
|
||||
m_leafs.remove (item);
|
||||
|
||||
m_leafs.insert (make_shared<DiffLeaf> (info));
|
||||
}
|
||||
|
||||
|
||||
} // ns3
|
||||
} // Sync
|
||||
@@ -0,0 +1,96 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_DIFF_STATE_H
|
||||
#define SYNC_DIFF_STATE_H
|
||||
|
||||
#include "sync-state.h"
|
||||
|
||||
namespace ns3 {
|
||||
namespace Sync {
|
||||
|
||||
class DiffState;
|
||||
typedef boost::shared_ptr<DiffState> DiffStatePtr;
|
||||
typedef boost::shared_ptr<DiffState> DiffStateConstPtr;
|
||||
|
||||
/**
|
||||
* @ingroup ccnx
|
||||
* @brief Differential SYNC state
|
||||
*/
|
||||
class DiffState : public State
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @see Default constructor
|
||||
*/
|
||||
DiffState ();
|
||||
virtual ~DiffState ();
|
||||
|
||||
/**
|
||||
* @brief Set successor for the diff state
|
||||
* @param next successor state
|
||||
*/
|
||||
void
|
||||
setNext (DiffStatePtr next)
|
||||
{
|
||||
m_next = next;
|
||||
}
|
||||
|
||||
// void
|
||||
// setDigest (Hash digest);
|
||||
|
||||
// Hash
|
||||
// getDigest () const;
|
||||
|
||||
/**
|
||||
* @brief Accumulate differences from `this' state to the most current state
|
||||
* @returns Accumulated differences from `this' state to the most current state
|
||||
*/
|
||||
DiffStatePtr
|
||||
diff () const;
|
||||
|
||||
/**
|
||||
* @brief Combine differences from `this' and `state'
|
||||
* @param state Differential state to combine with
|
||||
* @return Combined differences
|
||||
*
|
||||
* In case of collisions, `this' leaf will be replaced with the leaf of `state'
|
||||
*/
|
||||
DiffState&
|
||||
operator += (const DiffState &state);
|
||||
|
||||
// from State
|
||||
virtual void
|
||||
update (NameInfoConstPtr info, const SeqNo &seq);
|
||||
|
||||
virtual void
|
||||
remove (NameInfoConstPtr info);
|
||||
|
||||
private:
|
||||
DiffStatePtr m_next;
|
||||
// Hash m_digest;
|
||||
};
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_DIFF_STATE_H
|
||||
@@ -0,0 +1,80 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#include "sync-full-state.h"
|
||||
|
||||
#include "ns3/simulator.h"
|
||||
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <boost/lambda/lambda.hpp>
|
||||
#include <boost/lambda/bind.hpp>
|
||||
|
||||
using namespace boost;
|
||||
namespace ll = boost::lambda;
|
||||
|
||||
namespace ns3 {
|
||||
namespace Sync {
|
||||
|
||||
|
||||
FullState::FullState ()
|
||||
: m_lastUpdated (0)
|
||||
{
|
||||
}
|
||||
|
||||
FullState::~FullState ()
|
||||
{
|
||||
}
|
||||
|
||||
Time
|
||||
FullState::getTimeFromLastUpdate () const
|
||||
{
|
||||
return Simulator::Now () - m_lastUpdated;
|
||||
}
|
||||
|
||||
// from State
|
||||
void
|
||||
FullState::update (NameInfoConstPtr info, const SeqNo &seq)
|
||||
{
|
||||
m_lastUpdated = Simulator::Now ();
|
||||
|
||||
LeafContainer::iterator item = m_leafs.find (*info);
|
||||
if (item == m_leafs.end ())
|
||||
{
|
||||
m_leafs.insert (make_shared<Leaf> (info, cref (seq)));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_leafs.modify (item, ll::bind (&Leaf::setSeq, ll::_1, cref (seq)));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
FullState::remove (NameInfoConstPtr info)
|
||||
{
|
||||
m_lastUpdated = Simulator::Now ();
|
||||
|
||||
m_leafs.remove (info);
|
||||
}
|
||||
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
@@ -0,0 +1,67 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_FULL_STATE_H
|
||||
#define SYNC_FULL_STATE_H
|
||||
|
||||
#include "sync-state.h"
|
||||
|
||||
namespace ns3 {
|
||||
namespace Sync {
|
||||
|
||||
/**
|
||||
* \ingroup sync
|
||||
* @brief Cumulative SYNC state
|
||||
*/
|
||||
class FullState : public State
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Default constructor
|
||||
*/
|
||||
FullState ();
|
||||
virtual ~FullState ();
|
||||
|
||||
/**
|
||||
* @brief Get time period since last state update
|
||||
*
|
||||
* This value can be used to randomize reconciliation waiting time in SyncApp
|
||||
*/
|
||||
Time
|
||||
getTimeFromLastUpdate () const;
|
||||
|
||||
// from State
|
||||
virtual void
|
||||
update (NameInfoConstPtr info, const SeqNo &seq);
|
||||
|
||||
virtual void
|
||||
remove (NameInfoConstPtr info);
|
||||
|
||||
private:
|
||||
Time m_lastUpdated; ///< @brief Time when state was updated last time
|
||||
};
|
||||
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_STATE_H
|
||||
@@ -0,0 +1,21 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
@@ -0,0 +1,95 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_LEAF_H
|
||||
#define SYNC_LEAF_H
|
||||
|
||||
#include "sync-seq-no.h"
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
namespace ns3 {
|
||||
namespace Sync {
|
||||
|
||||
class NameInfo;
|
||||
|
||||
/**
|
||||
* \ingroup sync
|
||||
* @brief Sync tree leaf
|
||||
*/
|
||||
class Leaf
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor
|
||||
* @param info Smart pointer to leaf's name
|
||||
* @param seq Initial sequence number of the pointer
|
||||
*/
|
||||
Leaf (boost::shared_ptr<const NameInfo> info, const SeqNo &seq)
|
||||
: m_info (info)
|
||||
, m_seq (seq)
|
||||
{ }
|
||||
|
||||
virtual ~Leaf ()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get name of the leaf
|
||||
*/
|
||||
const NameInfo &
|
||||
getInfo () const
|
||||
{
|
||||
return *m_info;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get sequence number of the leaf
|
||||
*/
|
||||
const SeqNo&
|
||||
getSeq () const
|
||||
{
|
||||
return m_seq;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Update sequence number of the leaf
|
||||
* @param seq Sequence number
|
||||
*
|
||||
* Sequence number is updated to the largest value among this->m_seq and seq
|
||||
*/
|
||||
void
|
||||
setSeq (const SeqNo &seq)
|
||||
{
|
||||
m_seq = std::max (m_seq, seq);
|
||||
}
|
||||
|
||||
private:
|
||||
NameInfoConstPtr m_info;
|
||||
SeqNo m_seq;
|
||||
};
|
||||
|
||||
typedef boost::shared_ptr<Leaf> LeafPtr;
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_LEAF_H
|
||||
@@ -0,0 +1,21 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
@@ -0,0 +1,52 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_NAME_INFO_H
|
||||
#define SYNC_NAME_INFO_H
|
||||
|
||||
namespace ns3 {
|
||||
namespace Sync {
|
||||
|
||||
/**
|
||||
* @brief Abstraction of the leaf name
|
||||
*/
|
||||
class NameInfo
|
||||
{
|
||||
public:
|
||||
virtual ~NameInfo () = 0;
|
||||
/**
|
||||
* @brief Calculates digest of the name
|
||||
*/
|
||||
// Digest
|
||||
// getDigest () const;
|
||||
|
||||
virtual std::string
|
||||
toString () const = 0;
|
||||
};
|
||||
|
||||
typedef boost::shared_ptr<NameInfo> NameInfoPtr;
|
||||
typedef boost::shared_ptr<const NameInfo> NameInfoConstPtr;
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_NAME_INFO_H
|
||||
@@ -0,0 +1,21 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
@@ -0,0 +1,42 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_NAME_MANAGER_H
|
||||
#define SYNC_NAME_MANAGER_H
|
||||
|
||||
namespace ns3
|
||||
{
|
||||
|
||||
namespace Sync
|
||||
{
|
||||
|
||||
class NameManager
|
||||
{
|
||||
public:
|
||||
private:
|
||||
};
|
||||
|
||||
} // Sync
|
||||
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_NAME_MANAGER_H
|
||||
@@ -0,0 +1,105 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_SEQ_NO_H
|
||||
#define SYNC_SEQ_NO_H
|
||||
|
||||
namespace ns3
|
||||
{
|
||||
|
||||
namespace Sync
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief Sequence number abstraction
|
||||
*
|
||||
*
|
||||
*/
|
||||
struct SeqNo
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor with just sequence number. Session assumed to be zero
|
||||
* @param seq Sequence number
|
||||
*/
|
||||
SeqNo (uint32_t seq)
|
||||
: m_session (0)
|
||||
, m_seq (seq)
|
||||
{ }
|
||||
|
||||
/**
|
||||
* @brief Constructor with session and sequence id
|
||||
* @param session Session ID
|
||||
* @param seq Sequence number
|
||||
*/
|
||||
SeqNo (uint32_t session, uint32_t seq)
|
||||
: m_session (session)
|
||||
, m_seq (seq)
|
||||
{ }
|
||||
|
||||
/**
|
||||
* @brief Session ID (e.g., after crash, application will choose new session ID.
|
||||
*
|
||||
* Note that session IDs for the same name should always increase. So, the good choice
|
||||
* for the session ID is client's timestamp
|
||||
*/
|
||||
uint32_t m_session;
|
||||
|
||||
/**
|
||||
* @brief Sequence number
|
||||
*
|
||||
* Sequence number for a session always starts with 0 and goes to max value.
|
||||
*
|
||||
* For now, wrapping sequence number after max to zero is not supported
|
||||
*/
|
||||
uint32_t m_seq;
|
||||
|
||||
/**
|
||||
* @brief Compare if one sequence number is lower
|
||||
* @param seq Another sequence number to compare with
|
||||
*
|
||||
* tuple (session1, seq1) is less than (session2, seq2) in two cases:
|
||||
* 1. session1 < session2
|
||||
* 2. session1 == session2 and seq1 < seq2
|
||||
*/
|
||||
bool
|
||||
operator < (const SeqNo &seq) const
|
||||
{
|
||||
return m_session < seq.m_session || (m_session == seq.m_session && m_seq < seq.m_seq);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Compare if two sequence numbers are equal
|
||||
* @param seq Another sequence number to compare with
|
||||
*/
|
||||
bool
|
||||
operator == (const SeqNo &seq) const
|
||||
{
|
||||
return m_session == seq.m_session && m_seq == seq.m_seq;
|
||||
}
|
||||
};
|
||||
|
||||
} // Sync
|
||||
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_SEQ_NO_H
|
||||
@@ -0,0 +1,61 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_STATE_LEAF_CONTAINER
|
||||
#define SYNC_STATE_LEAF_CONTAINER
|
||||
|
||||
#include <boost/multi_index_container.hpp>
|
||||
// #include <boost/multi_index/tag.hpp>
|
||||
// #include <boost/multi_index/ordered_index.hpp>
|
||||
// #include <boost/multi_index/composite_key.hpp>
|
||||
#include <boost/multi_index/hashed_index.hpp>
|
||||
// #include <boost/multi_index/random_access_index.hpp>
|
||||
// #include <boost/multi_index/member.hpp>
|
||||
#include <boost/multi_index/mem_fun.hpp>
|
||||
|
||||
namespace mi = boost::multi_index;
|
||||
|
||||
namespace ns3 {
|
||||
namespace Sync {
|
||||
|
||||
/**
|
||||
* \ingroup sync
|
||||
* @brief Container for SYNC leaves
|
||||
*/
|
||||
struct LeafContainer : public mi::multi_index_container<
|
||||
LeafPtr,
|
||||
mi::indexed_by<
|
||||
// For fast access to elements using NameInfo
|
||||
mi::hashed_unique<
|
||||
mi::const_mem_fun<Leaf, const NameInfo&, &Leaf::getInfo>,
|
||||
LeafHash (),
|
||||
LeafEqual ()
|
||||
>
|
||||
>
|
||||
>
|
||||
{
|
||||
};
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_STATE_LEAF_CONTAINER
|
||||
@@ -0,0 +1,21 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
@@ -0,0 +1,42 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_STATE_MANAGER_H
|
||||
#define SYNC_STATE_MANAGER_H
|
||||
|
||||
namespace ns3
|
||||
{
|
||||
|
||||
namespace Sync
|
||||
{
|
||||
|
||||
class StateManager
|
||||
{
|
||||
public:
|
||||
private:
|
||||
};
|
||||
|
||||
} // Sync
|
||||
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_STATE_MANAGER_H
|
||||
@@ -0,0 +1,21 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
@@ -0,0 +1,70 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2012 University of California, Los Angeles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
|
||||
* 卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
|
||||
* Alexander Afanasyev <alexander.afanasyev@ucla.edu>
|
||||
*/
|
||||
|
||||
#ifndef SYNC_STATE_H
|
||||
#define SYNC_STATE_H
|
||||
|
||||
#include "sync-state-leaf-container.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \defgroup sync SYNC protocol
|
||||
*
|
||||
* Implementation of SYNC protocol
|
||||
*/
|
||||
namespace Sync {
|
||||
|
||||
/**
|
||||
* \ingroup sync
|
||||
* @brief Container for state leaves and definition of the abstract interface to work with State objects
|
||||
*/
|
||||
class State
|
||||
{
|
||||
public:
|
||||
virtual ~State () = 0;
|
||||
|
||||
/**
|
||||
* @brief Add or update leaf to the state tree
|
||||
*
|
||||
* @param info name of the leaf
|
||||
* @param seq sequence number of the leaf
|
||||
*/
|
||||
virtual void
|
||||
update (NameInfoConstPtr info, const SeqNo &seq) = 0;
|
||||
|
||||
/**
|
||||
* @brief Remove leaf from the state tree
|
||||
*
|
||||
* @param info name of the leaf
|
||||
*/
|
||||
virtual void
|
||||
remove (NameInfoConstPtr info) = 0;
|
||||
|
||||
protected:
|
||||
LeafContainer m_leaves;
|
||||
};
|
||||
|
||||
} // Sync
|
||||
} // ns3
|
||||
|
||||
#endif // SYNC_STATE_H
|
||||
@@ -0,0 +1,39 @@
|
||||
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
|
||||
|
||||
# def options(opt):
|
||||
# pass
|
||||
|
||||
# def configure(conf):
|
||||
# conf.check_nonfatal(header_name='stdint.h', define_name='HAVE_STDINT_H')
|
||||
|
||||
def build (bld):
|
||||
deps = ['core', 'network', 'NDNabstraction']
|
||||
if bld.env['ENABLE_PYTHON_BINDINGS']:
|
||||
deps.append ('visualizer')
|
||||
|
||||
module = bld.create_ns3_module ('sync', deps)
|
||||
module.uselib = 'BOOST BOOST_IOSTREAMS'
|
||||
|
||||
# tests = bld.create_ns3_module_test_library('sync')
|
||||
# tests.source = [
|
||||
# 'test/sync-test-suite.cc',
|
||||
# ]
|
||||
|
||||
headers = bld.new_task_gen(features=['ns3header'])
|
||||
headers.module = 'sync'
|
||||
headers.source = [
|
||||
'model/sync-app.h',
|
||||
]
|
||||
|
||||
# if not bld.env['ENABLE_NDN_ABSTRACT']:
|
||||
# bld.env['MODULES_NOT_BUILT'].append('NDNabstraction')
|
||||
# return
|
||||
|
||||
module.source = bld.path.ant_glob(['model/*.cc',
|
||||
'helper/*.cc'])
|
||||
|
||||
# if bld.env.ENABLE_EXAMPLES:
|
||||
# bld.add_subdirs('examples')
|
||||
|
||||
# bld.ns3_python_bindings()
|
||||
|
||||
Reference in new issue
Block a user