/* Reset firmament */ static int f_doreset(int argc, char *argv[]) { if (argc > 1) { printk(KERN_WARNING "firm_vm: error, use: reset\n"); return 0; } printk(KERN_INFO "firm_vm: reset called\n"); f_reset(); return 1; }
static void __exit f_cleanup_module(void) { int i; f_reset(); for (i = 0; f_flowtable[i].name != NULL; i++) { remove_proc_entry(f_flowtable[i].name, firm_rules_proc_dir); /* Remove queue handler (delayed packets) */ nf_unregister_queue_handler(f_flowtable[i].pf, &nf_q_h); /* Alterado */ } remove_proc_entry("control", firm_proc_dir); remove_proc_entry("rules", firm_proc_dir); remove_proc_entry("firmament", proc_net); printk(KERN_INFO "firm_vm: unloaded\n"); }
int64_t f_array_unshift(int _argc, VRefParam array, CVarRef var, CArrRef _argv /* = null_array */) { if (array.toArray()->isVectorData()) { if (!_argv.empty()) { for (ssize_t pos = _argv->iter_end(); pos != ArrayData::invalid_index; pos = _argv->iter_rewind(pos)) { array.prepend(_argv->getValueRef(pos)); } } array.prepend(var); } else { { Array newArray; newArray.append(var); if (!_argv.empty()) { for (ssize_t pos = _argv->iter_begin(); pos != ArrayData::invalid_index; pos = _argv->iter_advance(pos)) { newArray.append(_argv->getValueRef(pos)); } } for (ArrayIter iter(array); iter; ++iter) { Variant key(iter.first()); CVarRef value(iter.secondRef()); if (key.isInteger()) { newArray.appendWithRef(value); } else { newArray.lvalAt(key, AccessFlags::Key).setWithRef(value); } } array = newArray; } // Reset the array's internal pointer if (array.is(KindOfArray)) { f_reset(array); } } return array.toArray().size(); }