00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifdef HAVE_CONFIG_H
00018 # include <dtn-config.h>
00019 #endif
00020
00021 #include <stdlib.h>
00022
00023 #include "Connectivity.h"
00024 #include "ConnCommand.h"
00025 #include "Simulator.h"
00026 #include "Topology.h"
00027
00028 namespace dtnsim {
00029
00030 ConnCommand::ConnCommand()
00031 : TclCommand("conn")
00032 {
00033 bind_var(new oasys::StringOpt("type", &Connectivity::type_,
00034 "type", "Connectivity type."));
00035
00036 add_to_help("up", "Take connection up XXX");
00037 add_to_help("down", "Take connection down XXX");
00038 }
00039
00040 int
00041 ConnCommand::exec(int argc, const char** argv, Tcl_Interp* tclinterp)
00042 {
00043 (void)tclinterp;
00044
00045 if (argc < 2) {
00046 wrong_num_args(argc, argv, 1, 2, INT_MAX);
00047 return TCL_ERROR;
00048 }
00049
00050 const char* cmd = argv[1];
00051
00052 Connectivity* conn = Connectivity::instance();
00053
00054 if (!strcmp(cmd, "up") || !strcmp(cmd, "down")) {
00055
00056 if (argc < 4) {
00057 wrong_num_args(argc, argv, 2, 4, INT_MAX);
00058 return TCL_ERROR;
00059 }
00060
00061 const char* n1_name = argv[2];
00062 const char* n2_name = argv[3];
00063
00064 if (strcmp(n1_name, "*") != 0 &&
00065 Topology::find_node(n1_name) == NULL)
00066 {
00067 resultf("invalid node or wildcard '%s'", n1_name);
00068 return TCL_ERROR;
00069 }
00070
00071 if (strcmp(n2_name, "*") != 0 &&
00072 Topology::find_node(n2_name) == NULL)
00073 {
00074 resultf("invalid node or wildcard '%s'", n2_name);
00075 return TCL_ERROR;
00076 }
00077
00078 ConnState s;
00079 const char* invalid;
00080 if (! s.parse_options(argc - 4, argv + 4, &invalid)) {
00081 resultf("invalid option '%s'", invalid);
00082 return TCL_ERROR;
00083 }
00084
00085 s.open_ = !strcmp(cmd, "up");
00086
00087 conn->set_state(n1_name, n2_name, s);
00088
00089 return TCL_OK;
00090 }
00091
00092 resultf("conn: unsupported subcommand %s", cmd);
00093 return TCL_ERROR;
00094 }
00095
00096
00097 }