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 #include "umts-ip-interface.h"
00031 #include"umts-headers.h"
00032 #include<ip.h>
00033 #include <algorithm>
00034
00035 static class UmtsIPInterfaceModuleClass : public TclClass {
00036 public:
00037 UmtsIPInterfaceModuleClass() : TclClass("Module/IP/Interface/UMTS") {}
00038 TclObject* create(int, const char*const*) {
00039 return (new UmtsIPInterfaceModule);
00040
00041 }
00042 } class_Umtsipinterface_module;
00043
00044
00045
00046 UmtsIPInterfaceModule::UmtsIPInterfaceModule()
00047 {
00048
00049 }
00050
00051 UmtsIPInterfaceModule::~UmtsIPInterfaceModule()
00052 {
00053
00054 }
00055
00056
00057 int UmtsIPInterfaceModule::command(int argc, const char*const* argv)
00058 {
00059 Tcl& tcl = Tcl::instance();
00060 if(argc == 2)
00061 {
00062 if (strcasecmp(argv[1],"getCodeId")==0)
00063 {
00064 tcl.resultf("%d", getCode(ipAddr_));
00065 return TCL_OK;
00066 }
00067 }
00068 else if (argc == 3)
00069 {
00070 if (strcasecmp(argv[1],"setCodeId")==0)
00071 {
00072 addIpCode(ipAddr_, atoi(argv[2]));
00073 return TCL_OK;
00074 }
00075 }
00076
00077 return IPInterfaceModule::command(argc, argv);
00078 }
00079
00080
00081 void UmtsIPInterfaceModule::recv(Packet *p)
00082 {
00083 hdr_ip *iph = HDR_IP(p);
00084 hdr_cmn *ch = HDR_CMN(p);
00085 hdr_umtsphy * uh = HDR_UMTSPHY(p);
00086
00087 if(ch->direction() == hdr_cmn::DOWN)
00088 {
00089
00090
00091
00092
00093
00094 uh->me_code_id = getCode(ch->next_hop_);
00095 }
00096 IPInterfaceModule::recv(p);
00097 }
00098
00099
00100 int UmtsIPInterfaceModule::getCode(nsaddr_t ipaddr)
00101 {
00102 IpCodeList::iterator res;
00103 IpCode ic(ipaddr);
00104 res = find(ipclist.begin(), ipclist.end(), ic);
00105
00106 if (res == ipclist.end())
00107 return -1;
00108 else
00109 return res->code;
00110 }
00111
00112
00113 void UmtsIPInterfaceModule::addIpCode(nsaddr_t ipaddr, int code)
00114 {
00115
00116 IpCode ic(ipaddr, code);
00117 ipclist.push_front(ic);
00118
00119 }
00120
00121
00122
00123