static int service_update(struct service *s, struct blob_attr **tb, bool add) { struct blob_attr *cur; int rem; if (s->trigger) { trigger_del(s); free(s->trigger); s->trigger = NULL; } service_validate_del(s); if (tb[SERVICE_SET_TRIGGER] && blobmsg_data_len(tb[SERVICE_SET_TRIGGER])) { s->trigger = blob_memdup(tb[SERVICE_SET_TRIGGER]); if (!s->trigger) return -1; trigger_add(s->trigger, s); } if (tb[SERVICE_SET_VALIDATE] && blobmsg_data_len(tb[SERVICE_SET_VALIDATE])) { blobmsg_for_each_attr(cur, tb[SERVICE_SET_VALIDATE], rem) service_validate_add(s, cur); } if (tb[SERVICE_SET_INSTANCES]) { if (!add) vlist_update(&s->instances); blobmsg_for_each_attr(cur, tb[SERVICE_SET_INSTANCES], rem) { service_instance_add(s, cur); } if (!add) vlist_flush(&s->instances); }
void iprule_update_start(void) { if (!iprules_flushed) { system_flush_iprules(); iprules_flushed = true; } iprules_counter[0] = 1; iprules_counter[1] = 1; vlist_update(&iprules); }