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 #include "Python.h"
00032 #include "structmember.h"
00033
00034 #include "dtnaodv/AODVForwardingPolicy.h"
00035 #include "dtnaodv/AODVApp.h"
00036 #include "pydtn/WrapNode.h"
00037 #include "mobility/WirelessLink.h"
00038 #include "pydtn/parsers.h"
00039 #include "mobility/parsers.h"
00040 #include "simlpy/interpreter_hooks.h"
00041 #include "simlpy/Clock.h"
00042
00043 #include <iostream>
00044 #include <fstream>
00045
00054 #ifndef PyMODINIT_FUNC
00057 #define PyMODINIT_FUNC extern "C" void
00058 #endif
00059
00063 static char aodv_attach_doc[] = "Add AODV routing to a node.\n\
00064 \n\
00065 Calling syntax:\n\
00066 \n\
00067 pydtn.aodv.attach(<n>,<l>)\n\
00068 \n\
00069 <n> is a node to which we want to add AODV routing.\n\
00070 <l> is a wireless link that will employ AODV.\n";
00071
00079 static PyObject*
00080 aodv_attach( PyObject* self, PyObject* args )
00081 {
00082 if ( ! PyTuple_Check( args ) )
00083 {
00084 PyErr_SetString(PyExc_TypeError,"attach expects a list of arguments");
00085 return 0;
00086 }
00087 if ( 0 == PyTuple_Size( args ) )
00088 {
00089 PyErr_SetString(PyExc_TypeError,
00090 "attach expects a non-empty argument list");
00091 return 0;
00092 }
00093
00094 WrapNode* wn = parse_node( PyTuple_GetItem( args, 0 ) );
00095 if ( 0 == wn ) return 0;
00096
00097 Mobility::WirelessLink* wl =
00098 Mobility::parse_wl( PyTuple_GetItem( args, 1 ) );
00099 if ( 0 == wl ) return 0;
00100
00101 uint16_t prefix = 0;
00102
00103 AODVForwardingPolicy* pol =
00104 new AODVForwardingPolicy( &(wn->node()), prefix );
00105 if ( 0 == pol ) return 0;
00106 pol->addLink( &(wl->link()) );
00107 wn->setForwardingPolicy(pol);
00108
00109 AODVApp* app = new AODVApp( pol );
00110 if ( 0 == app ) return 0;
00111 wn->addApplication(app);
00112
00113 Py_INCREF(Py_None);
00114 return Py_None;
00115 }
00116
00119 static PyMethodDef ExampleMethods[] =
00120 {
00121 {"attach",aodv_attach,METH_VARARGS,aodv_attach_doc},
00122 {0,0,0,0}
00123 };
00124
00128 PyMODINIT_FUNC
00129 init_aodv(void)
00130 {
00131 (void) Py_InitModule("_aodv",ExampleMethods);
00132 }
00133