int insert_rule(struct ruleset rule) { DB *db; DBT data, key; int id = next_rule(); db = dbopen(RULESCRIPT, O_CREAT | O_RDWR, 0600, DB_BTREE, NULL); bzero(&key, sizeof(key)); key.data = &id; key.size = sizeof(rule.id); bzero(&data, sizeof(data)); data.data = &rule; data.size = sizeof(rule); if ((db->put)(db, &key, &data, 0)) { db->close(db); return -1; } db->close(db); return 0; }
/* * finds rule which matches bandwidth. * return value: number of matched rules * rulearray contains its rule numbers. */ int find_asmrule_match(char *asmrule,int **matched,int bw) { int i; int rules; int matchedrules = 0; rules = count_rules(asmrule); *matched = (int *)xmalloc(sizeof(int) * rules); for(i = 0; i < rules ;i++) { /* copy one rule to string*/ if(asmrule_match(asmrule,bw)) { /* match!! */ display(MSDL_DBG,"rule[%d] = %d matched\n",matchedrules,i); (*matched)[matchedrules] = i; matchedrules++; } asmrule = next_rule(asmrule); } return matchedrules; }