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