00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "InterfaceCommand.h"
00019 #include "contacts/InterfaceTable.h"
00020 #include "conv_layers/ConvergenceLayer.h"
00021 #include <oasys/util/StringBuffer.h>
00022
00023 namespace dtn {
00024
00025 InterfaceCommand::InterfaceCommand()
00026 : TclCommand("interface")
00027 {
00028 add_to_help("add <name> <conv layer> [<args>?]",
00029 "add an interface");
00030 add_to_help("del <name>", "delete an interface");
00031 add_to_help("list", "list all of the interfaces");
00032 }
00033
00034 int
00035 InterfaceCommand::exec(int argc, const char** argv, Tcl_Interp* interp)
00036 {
00037 (void)interp;
00038
00039 if (strcasecmp("list", argv[1]) == 0) {
00040
00041 if (argc > 2) {
00042 wrong_num_args(argc, argv, 1, 2, 2);
00043 }
00044
00045 oasys::StringBuffer buf;
00046 InterfaceTable::instance()->list(&buf);
00047 set_result(buf.c_str());
00048
00049 return TCL_OK;
00050 }
00051
00052
00053 else if (strcasecmp(argv[1], "add") == 0) {
00054 if (argc < 4) {
00055 wrong_num_args(argc, argv, 1, 4, INT_MAX);
00056 return TCL_ERROR;
00057 }
00058
00059 const char* name = argv[2];
00060 const char* proto = argv[3];
00061
00062 ConvergenceLayer* cl = ConvergenceLayer::find_clayer(proto);
00063 if (!cl) {
00064 resultf("can't find convergence layer for %s", proto);
00065 return TCL_ERROR;
00066 }
00067
00068
00069 if (! InterfaceTable::instance()->add(name, cl, proto,
00070 argc - 4, argv + 4)) {
00071 resultf("error adding interface %s", name);
00072 return TCL_ERROR;
00073 }
00074 return TCL_OK;
00075 }
00076
00077
00078 else if (strcasecmp(argv[1], "del") == 0) {
00079 if (argc != 3) {
00080 wrong_num_args(argc, argv, 2, 4, 4);
00081 return TCL_ERROR;
00082 }
00083
00084 const char* name = argv[2];
00085
00086 if (! InterfaceTable::instance()->del(name)) {
00087 resultf("error removing interface %s", name);
00088 return TCL_ERROR;
00089 }
00090
00091 return TCL_OK;
00092 }
00093
00094 resultf("invalid interface subcommand %s", argv[1]);
00095 return TCL_ERROR;
00096 }
00097
00098 }