diff options
Diffstat (limited to 'usr.sbin/relayd/pfe.c')
-rw-r--r-- | usr.sbin/relayd/pfe.c | 182 |
1 files changed, 91 insertions, 91 deletions
diff --git a/usr.sbin/relayd/pfe.c b/usr.sbin/relayd/pfe.c index b8b3b7ccc7c..b4ae7386390 100644 --- a/usr.sbin/relayd/pfe.c +++ b/usr.sbin/relayd/pfe.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pfe.c,v 1.44 2007/12/07 17:17:00 reyk Exp $ */ +/* $OpenBSD: pfe.c,v 1.45 2007/12/08 20:36:36 pyr Exp $ */ /* * Copyright (c) 2006 Pierre-Yves Ritschard <pyr@openbsd.org> @@ -322,7 +322,7 @@ pfe_dispatch_parent(int fd, short event, void * ptr) struct imsg imsg; ssize_t n; - static struct service *service = NULL; + static struct rdr *rdr = NULL; static struct table *table = NULL; struct host *host; struct address *virt; @@ -361,7 +361,7 @@ pfe_dispatch_parent(int fd, short event, void * ptr) sizeof(struct relayd) + IMSG_HEADER_SIZE) fatalx("corrupted reload data"); pfe_disable_events(); - purge_config(env, PURGE_SERVICES|PURGE_TABLES); + purge_config(env, PURGE_RDRS|PURGE_TABLES); merge_config(env, (struct relayd *)imsg.data); /* * no relays when reconfiguring yet. @@ -370,12 +370,12 @@ pfe_dispatch_parent(int fd, short event, void * ptr) env->protos = NULL; env->tables = calloc(1, sizeof(*env->tables)); - env->services = calloc(1, sizeof(*env->services)); - if (env->tables == NULL || env->services == NULL) + env->rdrs = calloc(1, sizeof(*env->rdrs)); + if (env->tables == NULL || env->rdrs == NULL) fatal(NULL); TAILQ_INIT(env->tables); - TAILQ_INIT(env->services); + TAILQ_INIT(env->rdrs); break; case IMSG_RECONF_TABLE: if ((table = calloc(1, sizeof(*table))) == NULL) @@ -391,33 +391,33 @@ pfe_dispatch_parent(int fd, short event, void * ptr) host->tablename = table->conf.name; TAILQ_INSERT_TAIL(&table->hosts, host, entry); break; - case IMSG_RECONF_SERVICE: - if ((service = calloc(1, sizeof(*service))) == NULL) + case IMSG_RECONF_RDR: + if ((rdr = calloc(1, sizeof(*rdr))) == NULL) fatal(NULL); - memcpy(&service->conf, imsg.data, - sizeof(service->conf)); - service->table = table_find(env, - service->conf.table_id); - if (service->conf.backup_id == EMPTY_TABLE) - service->backup = &env->empty_table; + memcpy(&rdr->conf, imsg.data, + sizeof(rdr->conf)); + rdr->table = table_find(env, + rdr->conf.table_id); + if (rdr->conf.backup_id == EMPTY_TABLE) + rdr->backup = &env->empty_table; else - service->backup = table_find(env, - service->conf.backup_id); - if (service->table == NULL || service->backup == NULL) + rdr->backup = table_find(env, + rdr->conf.backup_id); + if (rdr->table == NULL || rdr->backup == NULL) fatal("pfe_dispatch_parent:" " corrupted configuration"); - log_debug("pfe_dispatch_parent: service->table: %s", - service->table->conf.name); - log_debug("pfe_dispatch_parent: service->backup: %s", - service->backup->conf.name); - TAILQ_INIT(&service->virts); - TAILQ_INSERT_TAIL(env->services, service, entry); + log_debug("pfe_dispatch_parent: rdr->table: %s", + rdr->table->conf.name); + log_debug("pfe_dispatch_parent: rdr->backup: %s", + rdr->backup->conf.name); + TAILQ_INIT(&rdr->virts); + TAILQ_INSERT_TAIL(env->rdrs, rdr, entry); break; case IMSG_RECONF_VIRT: if ((virt = calloc(1, sizeof(*virt))) == NULL) fatal(NULL); memcpy(virt, imsg.data, sizeof(*virt)); - TAILQ_INSERT_TAIL(&service->virts, virt, entry); + TAILQ_INSERT_TAIL(&rdr->virts, virt, entry); break; case IMSG_RECONF_END: log_warnx("pfe: configuration reloaded"); @@ -510,31 +510,31 @@ pfe_dispatch_relay(int fd, short event, void * ptr) void show(struct ctl_conn *c) { - struct service *service; + struct rdr *rdr; struct host *host; struct relay *rlay; - if (env->services == NULL) + if (env->rdrs == NULL) goto relays; - TAILQ_FOREACH(service, env->services, entry) { - imsg_compose(&c->ibuf, IMSG_CTL_SERVICE, 0, 0, -1, - service, sizeof(*service)); - if (service->conf.flags & F_DISABLE) + TAILQ_FOREACH(rdr, env->rdrs, entry) { + imsg_compose(&c->ibuf, IMSG_CTL_RDR, 0, 0, -1, + rdr, sizeof(*rdr)); + if (rdr->conf.flags & F_DISABLE) continue; imsg_compose(&c->ibuf, IMSG_CTL_TABLE, 0, 0, -1, - service->table, sizeof(*service->table)); - if (!(service->table->conf.flags & F_DISABLE)) - TAILQ_FOREACH(host, &service->table->hosts, entry) + rdr->table, sizeof(*rdr->table)); + if (!(rdr->table->conf.flags & F_DISABLE)) + TAILQ_FOREACH(host, &rdr->table->hosts, entry) imsg_compose(&c->ibuf, IMSG_CTL_HOST, 0, 0, -1, host, sizeof(*host)); - if (service->backup->conf.id == EMPTY_TABLE) + if (rdr->backup->conf.id == EMPTY_TABLE) continue; imsg_compose(&c->ibuf, IMSG_CTL_TABLE, 0, 0, -1, - service->backup, sizeof(*service->backup)); - if (!(service->backup->conf.flags & F_DISABLE)) - TAILQ_FOREACH(host, &service->backup->hosts, entry) + rdr->backup, sizeof(*rdr->backup)); + if (!(rdr->backup->conf.flags & F_DISABLE)) + TAILQ_FOREACH(host, &rdr->backup->hosts, entry) imsg_compose(&c->ibuf, IMSG_CTL_HOST, 0, 0, -1, host, sizeof(*host)); } @@ -615,61 +615,61 @@ show_sessions(struct ctl_conn *c) } int -disable_service(struct ctl_conn *c, struct ctl_id *id) +disable_rdr(struct ctl_conn *c, struct ctl_id *id) { - struct service *service; + struct rdr *rdr; if (id->id == EMPTY_ID) - service = service_findbyname(env, id->name); + rdr = rdr_findbyname(env, id->name); else - service = service_find(env, id->id); - if (service == NULL) + rdr = rdr_find(env, id->id); + if (rdr == NULL) return (-1); - id->id = service->conf.id; + id->id = rdr->conf.id; - if (service->conf.flags & F_DISABLE) + if (rdr->conf.flags & F_DISABLE) return (0); - service->conf.flags |= F_DISABLE; - service->conf.flags &= ~(F_ADD); - service->conf.flags |= F_DEL; - service->table->conf.flags |= F_DISABLE; - log_debug("disable_service: disabled service %d", service->conf.id); + rdr->conf.flags |= F_DISABLE; + rdr->conf.flags &= ~(F_ADD); + rdr->conf.flags |= F_DEL; + rdr->table->conf.flags |= F_DISABLE; + log_debug("disable_rdr: disabled rdr %d", rdr->conf.id); pfe_sync(); return (0); } int -enable_service(struct ctl_conn *c, struct ctl_id *id) +enable_rdr(struct ctl_conn *c, struct ctl_id *id) { - struct service *service; + struct rdr *rdr; struct ctl_id eid; if (id->id == EMPTY_ID) - service = service_findbyname(env, id->name); + rdr = rdr_findbyname(env, id->name); else - service = service_find(env, id->id); - if (service == NULL) + rdr = rdr_find(env, id->id); + if (rdr == NULL) return (-1); - id->id = service->conf.id; + id->id = rdr->conf.id; - if (!(service->conf.flags & F_DISABLE)) + if (!(rdr->conf.flags & F_DISABLE)) return (0); - service->conf.flags &= ~(F_DISABLE); - service->conf.flags &= ~(F_DEL); - service->conf.flags |= F_ADD; - log_debug("enable_service: enabled service %d", service->conf.id); + rdr->conf.flags &= ~(F_DISABLE); + rdr->conf.flags &= ~(F_DEL); + rdr->conf.flags |= F_ADD; + log_debug("enable_rdr: enabled rdr %d", rdr->conf.id); bzero(&eid, sizeof(eid)); /* XXX: we're syncing twice */ - eid.id = service->table->conf.id; + eid.id = rdr->table->conf.id; if (enable_table(c, &eid) == -1) return (-1); - if (service->backup->conf.id == EMPTY_ID) + if (rdr->backup->conf.id == EMPTY_ID) return (0); - eid.id = service->backup->conf.id; + eid.id = rdr->backup->conf.id; if (enable_table(c, &eid) == -1) return (-1); return (0); @@ -679,7 +679,7 @@ int disable_table(struct ctl_conn *c, struct ctl_id *id) { struct table *table; - struct service *service; + struct rdr *rdr; struct host *host; if (id->id == EMPTY_ID) @@ -689,7 +689,7 @@ disable_table(struct ctl_conn *c, struct ctl_id *id) if (table == NULL) return (-1); id->id = table->conf.id; - if ((service = service_find(env, table->conf.serviceid)) == NULL) + if ((rdr = rdr_find(env, table->conf.rdrid)) == NULL) fatalx("disable_table: desynchronised"); if (table->conf.flags & F_DISABLE) @@ -708,7 +708,7 @@ disable_table(struct ctl_conn *c, struct ctl_id *id) int enable_table(struct ctl_conn *c, struct ctl_id *id) { - struct service *service; + struct rdr *rdr; struct table *table; struct host *host; @@ -720,7 +720,7 @@ enable_table(struct ctl_conn *c, struct ctl_id *id) return (-1); id->id = table->conf.id; - if ((service = service_find(env, table->conf.serviceid)) == NULL) + if ((rdr = rdr_find(env, table->conf.rdrid)) == NULL) fatalx("enable_table: desynchronised"); if (!(table->conf.flags & F_DISABLE)) @@ -818,7 +818,7 @@ enable_host(struct ctl_conn *c, struct ctl_id *id) void pfe_sync(void) { - struct service *service; + struct rdr *rdr; struct table *active; struct table *table; struct ctl_id id; @@ -827,53 +827,53 @@ pfe_sync(void) bzero(&id, sizeof(id)); bzero(&imsg, sizeof(imsg)); - TAILQ_FOREACH(service, env->services, entry) { - service->conf.flags &= ~(F_BACKUP); - service->conf.flags &= ~(F_DOWN); + TAILQ_FOREACH(rdr, env->rdrs, entry) { + rdr->conf.flags &= ~(F_BACKUP); + rdr->conf.flags &= ~(F_DOWN); - if (service->conf.flags & F_DISABLE || - (service->table->up == 0 && service->backup->up == 0)) { - service->conf.flags |= F_DOWN; + if (rdr->conf.flags & F_DISABLE || + (rdr->table->up == 0 && rdr->backup->up == 0)) { + rdr->conf.flags |= F_DOWN; active = NULL; - } else if (service->table->up == 0 && service->backup->up > 0) { - service->conf.flags |= F_BACKUP; - active = service->backup; + } else if (rdr->table->up == 0 && rdr->backup->up > 0) { + rdr->conf.flags |= F_BACKUP; + active = rdr->backup; active->conf.flags |= - service->table->conf.flags & F_CHANGED; + rdr->table->conf.flags & F_CHANGED; active->conf.flags |= - service->backup->conf.flags & F_CHANGED; + rdr->backup->conf.flags & F_CHANGED; } else - active = service->table; + active = rdr->table; if (active != NULL && active->conf.flags & F_CHANGED) { id.id = active->conf.id; imsg.hdr.type = IMSG_CTL_TABLE_CHANGED; imsg.hdr.len = sizeof(id) + IMSG_HEADER_SIZE; imsg.data = &id; - sync_table(env, service, active); + sync_table(env, rdr, active); control_imsg_forward(&imsg); } - if (service->conf.flags & F_DOWN) { - if (service->conf.flags & F_ACTIVE_RULESET) { - flush_table(env, service); + if (rdr->conf.flags & F_DOWN) { + if (rdr->conf.flags & F_ACTIVE_RULESET) { + flush_table(env, rdr); log_debug("pfe_sync: disabling ruleset"); - service->conf.flags &= ~(F_ACTIVE_RULESET); - id.id = service->conf.id; + rdr->conf.flags &= ~(F_ACTIVE_RULESET); + id.id = rdr->conf.id; imsg.hdr.type = IMSG_CTL_PULL_RULESET; imsg.hdr.len = sizeof(id) + IMSG_HEADER_SIZE; imsg.data = &id; - sync_ruleset(env, service, 0); + sync_ruleset(env, rdr, 0); control_imsg_forward(&imsg); } - } else if (!(service->conf.flags & F_ACTIVE_RULESET)) { + } else if (!(rdr->conf.flags & F_ACTIVE_RULESET)) { log_debug("pfe_sync: enabling ruleset"); - service->conf.flags |= F_ACTIVE_RULESET; - id.id = service->conf.id; + rdr->conf.flags |= F_ACTIVE_RULESET; + id.id = rdr->conf.id; imsg.hdr.type = IMSG_CTL_PUSH_RULESET; imsg.hdr.len = sizeof(id) + IMSG_HEADER_SIZE; imsg.data = &id; - sync_ruleset(env, service, 1); + sync_ruleset(env, rdr, 1); control_imsg_forward(&imsg); } } |