00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _CONVERGENCE_LAYER_H_
00018 #define _CONVERGENCE_LAYER_H_
00019
00020 #include <string>
00021 #include <vector>
00022 #include <oasys/util/Singleton.h>
00023 #include <oasys/serialize/Serialize.h>
00024
00025 #include "contacts/Link.h"
00026 #include "contacts/Contact.h"
00027 #include "contacts/Interface.h"
00028 #include "contacts/NamedAttribute.h"
00029
00030
00031 namespace oasys {
00032 class StringBuffer;
00033 }
00034
00035 namespace dtn {
00036
00040 class ConvergenceLayer : public oasys::Logger {
00041 public:
00045 ConvergenceLayer(const char* classname,
00046 const char* name)
00047 : Logger(classname, "/dtn/cl/%s", name),
00048 name_(name)
00049 {
00050 }
00051
00055 virtual ~ConvergenceLayer();
00056
00060 virtual bool set_cla_parameters(AttributeVector ¶ms);
00061
00065 virtual bool set_interface_defaults(int argc, const char* argv[],
00066 const char** invalidp);
00067
00071 virtual bool set_link_defaults(int argc, const char* argv[],
00072 const char** invalidp);
00073
00077 virtual bool interface_up(Interface* iface,
00078 int argc, const char* argv[]);
00079
00083 virtual bool interface_down(Interface* iface);
00084
00088 virtual void dump_interface(Interface* iface, oasys::StringBuffer* buf);
00089
00093 virtual bool init_link(const LinkRef& link, int argc, const char* argv[]);
00094
00099 virtual void delete_link(const LinkRef& link);
00100
00104 virtual void dump_link(const LinkRef& link, oasys::StringBuffer* buf);
00105
00109 virtual bool reconfigure_link(const LinkRef& link,
00110 int argc, const char* argv[]);
00111
00112 virtual void reconfigure_link(const LinkRef& link,
00113 AttributeVector& params);
00114
00121 virtual bool open_contact(const ContactRef& contact) = 0;
00122
00134 virtual bool close_contact(const ContactRef& contact);
00135
00145 virtual void bundle_queued(const LinkRef& link, const BundleRef& bundle) = 0;
00146
00150 virtual void cancel_bundle(const LinkRef& link, const BundleRef& bundle);
00151
00155 virtual void is_eid_reachable(const std::string& query_id,
00156 Interface* iface,
00157 const std::string& endpoint);
00158
00162 virtual void query_link_attributes(const std::string& query_id,
00163 const LinkRef& link,
00164 const AttributeNameVector& attributes);
00165
00169 virtual void query_iface_attributes(const std::string& query_id,
00170 Interface* iface,
00171 const AttributeNameVector& attributes);
00172
00176 virtual void query_cla_parameters(const std::string& query_id,
00177 const AttributeNameVector& parameters);
00178
00182 virtual void shutdown() { }
00183
00188 static void init_clayers();
00189 static void add_clayer(ConvergenceLayer* cl);
00190
00195 static ConvergenceLayer* find_clayer(const char* proto);
00196
00200 static void shutdown_clayers();
00201
00205 const char* name() { return name_; }
00206
00210 static const u_int32_t MAGIC = 0x64746e21;
00211
00212 protected:
00216 const char* name_;
00217
00218 };
00219
00224 class CLVector : public oasys::Singleton<CLVector>,
00225 public std::vector<ConvergenceLayer*> {
00226 public:
00227 virtual ~CLVector();
00228 };
00229
00234 class CLInfo : public oasys::SerializableObject {
00235 public:
00236 virtual ~CLInfo() {}
00237
00241 virtual void serialize( oasys::SerializeAction *) {}
00242 };
00243
00244 }
00245
00246 #endif