00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifdef HAVE_CONFIG_H
00017 # include <dtn-config.h>
00018 #endif
00019
00020 #if defined(XERCES_C_ENABLED) && defined(EXTERNAL_CL_ENABLED)
00021
00022 #include <oasys/io/NetUtils.h>
00023
00024 #include "ECLACommand.h"
00025 #include "conv_layers/ConvergenceLayer.h"
00026 #include "conv_layers/ExternalConvergenceLayer.h"
00027
00028 namespace dtn {
00029
00030 static ExternalConvergenceLayer* ecl = NULL;
00031
00032 ECLACommand::ECLACommand()
00033 : TclCommand("ecla")
00034 {
00035 bind_var( new oasys::StringOpt("schema",
00036 &ExternalConvergenceLayer::schema_,
00037 "ECLA schema location",
00038 "The location of the ECLA schema file.") );
00039
00040 bind_var( new oasys::InAddrOpt("server_addr",
00041 &ExternalConvergenceLayer::server_addr_,
00042 "ECLA server address",
00043 "The address to listen for external CLAs on") );
00044
00045 bind_var( new oasys::UInt16Opt("server_port",
00046 &ExternalConvergenceLayer::server_port_,
00047 "ECLA server port",
00048 "The port to listen for external CLAs on") );
00049
00050 bind_var( new oasys::BoolOpt("create_discovered_links",
00051 &ExternalConvergenceLayer::create_discovered_links_,
00052 "Whether external CLAs should create discovered links") );
00053
00054 bind_var( new oasys::BoolOpt("discovered_prev_hop_header",
00055 &ExternalConvergenceLayer::discovered_prev_hop_header_,
00056 "Whether discovered links get prev-hop headers") );
00057 }
00058
00059 int
00060 ECLACommand::exec(int argc, const char** argv, Tcl_Interp* interp)
00061 {
00062 (void)interp;
00063
00064 if (argc < 2) {
00065 resultf("Need an ecla subcommand");
00066 return TCL_ERROR;
00067 }
00068
00069 const char* cmd = argv[1];
00070
00071 if (strcmp(cmd, "start") == 0) {
00072 if (ecl) {
00073 resultf("ExternalConvergenceLayer already started");
00074 return TCL_ERROR;
00075 }
00076
00077 ecl = new ExternalConvergenceLayer();
00078 ecl->start();
00079 ConvergenceLayer::add_clayer(ecl);
00080 }
00081
00082 else {
00083 resultf("Unimplemented ecla subcommand %s", cmd);
00084 return TCL_ERROR;
00085 }
00086
00087 return TCL_OK;
00088 }
00089
00090 }
00091
00092 #endif // XERCES_C_ENABLED && EXTERNAL_CL_ENABLED