static PyObject * pytrap_ifcctl(PyObject *self, PyObject *args, PyObject *keywds) { uint32_t dir_in; uint32_t request; uint32_t ifcidx; uint32_t value; static char *kwlist[] = {"ifcidx", "dir_in", "request", "value", NULL}; if (!PyArg_ParseTupleAndKeywords(args, keywds, "ipii", kwlist, &ifcidx, &dir_in, &request, &value)) { return NULL; } trap_ifcctl((dir_in?TRAPIFC_INPUT:TRAPIFC_OUTPUT), ifcidx, request, value); Py_RETURN_NONE; }
int main(int argc, char **argv) { int ret; INIT_MODULE_INFO_STRUCT(MODULE_BASIC_INFO, MODULE_PARAMS) // Declare progress structure, pointer to this struct, initialize progress limit NMCM_PROGRESS_DEF; get_o_param(argc, argv, module_getopt_string, long_options); /* output have to be known before TRAP init */ // ***** TRAP initialization ***** TRAP_DEFAULT_INITIALIZATION(argc, argv, *module_info); // Register signal handler. TRAP_REGISTER_DEFAULT_SIGNAL_HANDLER(); // Handles SIGTERM and SIGINT signal(SIGUSR1, signal_handler); signal(SIGALRM, send_handler); // ***** Create UniRec template ***** char *unirec_specifier = "PACKETS,BYTES"; signed char opt; while ((opt = TRAP_GETOPT(argc, argv, module_getopt_string, long_options)) != -1) { switch (opt) { case 'p': NMCM_PROGRESS_INIT(atoi(optarg), return 1); break; case 'P': nmcm_progress_ptr->print_char = optarg[0]; break; case 'o': /* proccessed earlier */ break; default: fprintf(stderr, "Invalid arguments.\n"); FREE_MODULE_INFO_STRUCT(MODULE_BASIC_INFO, MODULE_PARAMS); TRAP_DEFAULT_FINALIZATION(); return 3; } } ur_template_t *tmplt = ur_create_input_template(0, unirec_specifier, NULL); if (tmplt == NULL) { fprintf(stderr, "Error: Invalid UniRec specifier.\n"); TRAP_DEFAULT_FINALIZATION(); FREE_MODULE_INFO_STRUCT(MODULE_BASIC_INFO, MODULE_PARAMS); return 4; } if (send_interval) { /* in case of -o option */ /* create new output tempate */ out_tmplt = ur_create_output_template(0,"FLOWS,PACKETS,BYTES", NULL); if (!out_tmplt) { fprintf(stderr, "Error: Invalid UniRec specifier (this is implementation error, contact author of the module).\n"); trap_finalize(); FREE_MODULE_INFO_STRUCT(MODULE_BASIC_INFO, MODULE_PARAMS); ur_free_template(tmplt); return 4; } /* allocate space for output record with no dynamic part */ out_rec = ur_create_record(out_tmplt, 0); if (!out_rec) { ur_free_template(out_tmplt); TRAP_DEFAULT_FINALIZATION(); FREE_MODULE_INFO_STRUCT(MODULE_BASIC_INFO, MODULE_PARAMS); ur_free_template(tmplt); ur_free_template(out_tmplt); return 4; } /* Set NO_WAIT to output interface */ ret = trap_ifcctl(TRAPIFC_OUTPUT, 0, TRAPCTL_SETTIMEOUT, TRAP_NO_WAIT); if (ret != TRAP_E_OK) { ur_free_template(tmplt); ur_free_template(out_tmplt); ur_free_record(out_rec); fprintf(stderr, "Error: trap_ifcctl.\n"); trap_finalize(); FREE_MODULE_INFO_STRUCT(MODULE_BASIC_INFO, MODULE_PARAMS) return 4; } alarm(send_interval); /* arrange SIGARLM in send_interval seconds */ }