示例#1
0
void _rrwrk_config_ppp(rrwrk_t *self, inip_file_t *keyfile)
{
    assert(keyfile);
    self->sinker = inip_get_string(keyfile, "pppwrk", "sinker", NULL);
    assert(self->sinker);
    self->broker = inip_get_string(keyfile, "pppwrk", "broker", NULL);
    assert(self->broker);
    self->liveness = inip_get_integer(keyfile, "pppwrk", "liveness", HEARTBEAT_LIVENESS);
    self->heartbeat = inip_get_integer(keyfile, "pppwrk", "heartbeat", HEARTBEAT_DFT);
    self->reconnect = inip_get_integer(keyfile, "pppwrk", "reconnect", RECONNECT_DFT);

    rrwrk_connect_to_broker(self);
    rrwrk_connect_to_sinker(self);
}
示例#2
0
void mlog_load(char *fname)
{
  char *group_index, *group_level;
  char *name, *value, *logname;
  int n, default_level;
  inip_file_t *fd;
  inip_group_t *g;
  inip_element_t *ele;


  if (_log_lock == NULL) _log_init();

  group_index = "log_index";
  group_level = "log_level";

  //** Open the file
  fd = inip_read(fname);
  if (fd == NULL) {
     log_printf(0, "Error loading module definitions!  fname=%s\n", fname);
     return;
  }

  default_level = inip_get_integer(fd, group_level, "default", 0);
//printf("mlog_load: inital ll=%d\n", _log_level);
  _log_level = inip_get_integer(fd, group_level, "start_level", _log_level);
//printf("mlog_load: new ll=%d\n", _log_level);
  for (n=0; n<_mlog_size; n++) _mlog_table[n] = default_level;
  logname = inip_get_string(fd, group_level, "output", "stdout");
  open_log(logname);
  _log_maxsize = inip_get_integer(fd, group_level, "size", 100*1024*1024);

  //** Load the mappings
  g = inip_find_group(fd, group_index);
  if (g == NULL) {
     log_printf(1, "Missing %s group!\n", group_index);
     inip_destroy(fd);
     return;
  }

  ele = inip_first_element(g);
  while (ele != NULL) {
     name = inip_get_element_key(ele);
     value = inip_get_element_value(ele);

     n = (value != NULL) ? atoi(value) : -1;

     if ((n>=0) && (n<_mlog_size)) {
        _mlog_file_table[n] = strdup(name);
        _mlog_table[n] = inip_get_integer(fd, group_level, name, _mlog_table[n]);
//printf("mlog_load: mi=%d key=%s val=%d\n", n, name, _mlog_table[n]);
     } else {
       log_printf(0, "Invalid index: %s=%d  should be between 0..%d!  Skipping option\n", name, n, _mlog_size);
     }

     //** Move to the next segmnet to load
     ele = inip_next_element(ele);
  }

  inip_destroy(fd);
}
示例#3
0
segment_t *load_segment(service_manager_t *ess, ex_id_t id, exnode_exchange_t *ex)
{
    char *type = NULL;
    char name[1024];
    segment_load_t *sload;

    if (ex->type == EX_TEXT) {
        snprintf(name, sizeof(name), "segment-" XIDT, id);
        inip_file_t *fd = ex->text.fd;
        type = inip_get_string(fd, name, "type", "");
    } else if (ex->type == EX_PROTOCOL_BUFFERS) {
        log_printf(0, "load_segment:  segment exnode parsing goes here\n");
    } else {
        log_printf(0, "load_segment:  Invalid exnode type type=%d for id=" XIDT "\n", ex->type, id);
        return(NULL);
    }

    sload = lookup_service(ess, SEG_SM_LOAD, type);
    if (sload == NULL) {
        log_printf(0, "load_segment:  No matching driver for type=%s  id=" XIDT "\n", type, id);
        return(NULL);
    }

    free(type);
    return((*sload)(ess, id, ex));
}
示例#4
0
void _rrsvr_config_lpp(rrsvr_t *self, inip_file_t *keyfile)
{
    assert(keyfile);

    rr_set_mode_tm(keyfile, "lppsvr", &self->mode, &self->timeout);
    self->endpoint = inip_get_string(keyfile, "lppsvr", "endpoint", NULL);
    assert(self->endpoint);

    _rrsvr_bind_lpp(self);
}
void zsock_cc_load(inip_file_t *kf, zsock_context_t *cfg)
{
    int i;

    for (i = 0; i < ZSOCK_MAX_NUM_CMDS; i++) {
        cfg->cc[i].conn_type = NS_TYPE_ZSOCK;

        char *type = inip_get_string(kf, "zsock_connect", "sock_type", NULL);
        cfg->cc[i].sock_type = zsock_get_type(type);
        assert(cfg->cc[i].sock_type != -1);
        free(type);

        cfg->cc[i].prtcl = inip_get_string(kf, "zsock_connect", "protocol", NULL);

        //** Handle socket options
        zsocket_opt_t *option = zsock_option_create();

        zsock_option_load(kf, "zsock_connect", option);

        cfg->cc[i].arg = (void *)option;
    }
}
示例#6
0
void phoebus_load_config(inip_file_t *kf)
{
  if (global_phoebus == NULL) phoebus_init();

  char *gateway = inip_get_string(kf, "phoebus", "gateway", NULL);
  
  if (gateway != NULL) {
     phoebus_path_set(global_phoebus, gateway);
     log_printf(10, "phoebus_init: Using the gateway specified in local config: %s\n", gateway);
     free(gateway);
  } else if (!global_phoebus->path) {
     log_printf(10, "phoebus_init: Error, no valid Phoebus Gateway specified!\n");
     abort();
  }
}
示例#7
0
void rrsvr_load_config(rrsvr_t *self, char *fname)
{
    assert(fname);
    inip_file_t *keyfile = inip_read(fname);
    self->pattern = inip_get_string(keyfile, "zsock", "pattern", NULL);
    assert(self->pattern);

    if (strcmp(self->pattern, "lpp") == 0) {
        _rrsvr_config_lpp(self, keyfile);
    } else {
        log_printf(0, "Unknown ZMQ Pattern: %s.\n", self->pattern);
        exit(0);
    }

    inip_destroy(keyfile);
}
示例#8
0
void rrwrk_load_config(rrwrk_t *self, char *fname)
{
    assert(fname);
    inip_file_t *keyfile = inip_read(fname);
    self->pattern = inip_get_string(keyfile, "zsock", "pattern", NULL);
    assert(self->pattern); //** Need a more decent way to handle misconfiguration

    if (strcmp(self->pattern, "ppp") == 0) {
        _rrwrk_config_ppp(self, keyfile);
    } else {
        log_printf(0, "W: Unknown ZMQ Pattern: %s.\n", self->pattern);
        exit(EXIT_FAILURE);
    }

    inip_destroy(keyfile);
}
示例#9
0
int main(int argc, char **argv)
{
    if (argc < 2) {
        printf("\n");
        printf("rs_test LIO_COMMON_OPTIONS\n");
        lio_print_options(stdout);
        return(1);
    }

    int thread_nbr;

    lio_init(&argc, &argv);

    thread_nbr = lio_parallel_task_count;

    //*** Parses the args
    char *svr_proto, *svr_addr, *svr_port, *zmq_svr;

    //** Retrieves remote zmq server name, transport protocol, and lisenting port
    svr_proto = inip_get_string(lio_gc->ifd, "zmq_server", "protocol", RS_ZMQ_DFT_PROTO);
    svr_addr = inip_get_string(lio_gc->ifd, "zmq_server", "server", NULL);
    svr_port = inip_get_string(lio_gc->ifd, "zmq_server", "port", RS_ZMQ_DFT_PORT);
    asprintf(&zmq_svr, "%s://%s:%s", string_trim(svr_proto), string_trim(svr_addr), string_trim(svr_port));


    //** Creates zmq context
    void *context = zmq_ctx_new();
    assert(context != NULL);

    //** Creates zmq router and binds it to tcp://*:5555
    //** It talks to rs client
    void *router = zmq_socket(context, ZMQ_ROUTER);
    assert(router != NULL);
    int rc = zmq_bind(router, zmq_svr);
    assert(rc != -1);
    printf("ZMQ router socket created.\n");

    // Creates and binds DEALER socket to inproc://worker
    // It talks to workers
    void *dealer = zmq_socket(context, ZMQ_DEALER);
    assert(dealer != NULL);
    rc = zmq_bind(dealer, "inproc://worker");
    assert(rc != -1);
    printf("ZMQ dealer socket created.\n");

    //** Blocks the SIGINT, SIGTERM signals
    sigemptyset(&signal_mask);
    sigaddset(&signal_mask, SIGINT);
    sigaddset(&signal_mask, SIGTERM);
    rc = pthread_sigmask(SIG_BLOCK, &signal_mask, NULL);
    assert(rc == 0);

    //** Launches thread pool
    printf("Launching threads...\n");
    int thread_count;
    rs_zmq_thread_arg_t **arg;
    type_malloc_clear(arg, rs_zmq_thread_arg_t *, thread_nbr);
    pthread_t *workers;
    type_malloc_clear(workers, pthread_t, thread_nbr);
    for (thread_count = 0; thread_count < thread_nbr; thread_count++) {
        type_malloc_clear(arg[thread_count], rs_zmq_thread_arg_t, 1);
        arg[thread_count]->zmq_context = context;
        arg[thread_count]->rs = lio_gc->rs;
        arg[thread_count]->da = ds_attr_create(lio_gc->ds);
        arg[thread_count]->ds = lio_gc->ds;
        arg[thread_count]->timeout = lio_gc->timeout;
        pthread_create(&workers[thread_count], NULL, rs_zmq_worker_routine, (void *)arg[thread_count]);
    }
    printf("Launched all %d threads.\n", thread_nbr);

    //** Unblocks the SIGINT, SIGTERM signals
    rc = pthread_sigmask(SIG_UNBLOCK, &signal_mask, NULL);
    assert(rc == 0);

    //** Catches the SIGNIT, SIGTERM signals
    catch_signals();

    //** Uses a QUEUE device to connect router and dealer
    zmq_device(ZMQ_QUEUE, router, dealer);

    if (s_interrupted == 1)
        printf("Interrupt received, killing server...\n");

    //** Shutdown zmq should go before cleaning thread resources
    zmq_close(router);
    zmq_close(dealer);
    printf("Destroied ZMQ router and dealer\n");
    zmq_ctx_destroy(context); //** This "trigers" the exit of all threads, because it makes all blocking operations on sockets return
    printf("Destroied ZMQ context\n");
    fflush(stdout);

    //** Waits for all threads to exit
    for (thread_count = 0; thread_count < thread_nbr; thread_count++) {
        pthread_join(workers[thread_count], NULL);
    }

    //** Destroys allocations for threads
    for (thread_count = 0; thread_count < thread_nbr; thread_count++) {
        ds_attr_destroy(lio_gc->ds, arg[thread_count]->da);
        free(arg[thread_count]);
    }
    free(arg);
    free(workers);

    free(svr_proto);
    free(svr_addr);
    free(svr_port);
    free(zmq_svr);

    lio_shutdown();

    return(0);
}
void zsock_option_load(inip_file_t *kf, const char *group, zsocket_opt_t *option)
{
    if (_find_group_key(kf, group, "rate")) {
        set_flag(option->flag, RATE);
        option->rate = inip_get_integer(kf, group, "rate", 100);
    }

    if (_find_group_key(kf, group, "multicast_hops")) {
        set_flag(option->flag, MULTICAST_HOPS);
        option->rate = inip_get_integer(kf, group, "multicast_hops", 1);
    }

    if (_find_group_key(kf, group, "router_behavior")) {
        set_flag(option->flag, ROUTER_BEHAVIOR);
        option->router_behavior = inip_get_integer(kf, group, "router_behavior", 0);
    }

    if (_find_group_key(kf, group, "sndhwm")) {
        set_flag(option->flag, SNDHWM);
        option->sndhwm = inip_get_integer(kf, group, "sndhwm", 1000);
    }

    if (_find_group_key(kf, group, "rcvhwm")) {
        set_flag(option->flag, RCVHWM);
        option->rcvhwm = inip_get_integer(kf, group, "rcvhwm", 1000);
    }

    if (_find_group_key(kf, group, "affinity")) {
        set_flag(option->flag, AFFINITY);
        option->affinity = inip_get_integer(kf, group, "affinity", 0);
    }

    if (_find_group_key(kf, group, "recovery_ivl")) {
        set_flag(option->flag, RECOVERY_IVL);
        option->recovery_ivl = inip_get_integer(kf, group, "recovery_ivl", 1);
    }

    if (_find_group_key(kf, group, "sndbuf")) {
        set_flag(option->flag, SNDBUF);
        option->sndbuf = inip_get_integer(kf, group, "sndbuf", 0);
    }

    if (_find_group_key(kf, group, "rcvbuf")) {
        set_flag(option->flag, RCVBUF);
        option->rcvbuf = inip_get_integer(kf, group, "rcvbuf", 0);
    }

    if (_find_group_key(kf, group, "reconnect_ivl")) {
        set_flag(option->flag, RECONNECT_IVL);
        option->reconnect_ivl = inip_get_integer(kf, group, "reconnect_ivl", 100);
    }

    if (_find_group_key(kf, group, "reconnect_ivl_max")) {
        set_flag(option->flag, RECONNECT_IVL_MAX);
        option->reconnect_ivl = inip_get_integer(kf, group, "reconnect_ivl_max", 0);
    }

    if (_find_group_key(kf, group, "backlog")) {
        set_flag(option->flag, BACKLOG);
        option->backlog = inip_get_integer(kf, group, "backlog", 100);
    }

    if (_find_group_key(kf, group, "maxmsgsize")) {
        set_flag(option->flag, MAXMSGSIZE);
        option->maxmsgsize = inip_get_integer(kf, group, "maxmsgsize", -1);
    }

    if (_find_group_key(kf, group, "rcvtimeo")) {
        set_flag(option->flag, RCVTIMEO);
        option->rcvtimeo = inip_get_integer(kf, group, "rcvtimeo", -1);
    }

    if (_find_group_key(kf, group, "sndtimeo")) {
        set_flag(option->flag, SNDTIMEO);
        option->sndtimeo = inip_get_integer(kf, group, "sndtimeo", -1);
    }

    if (_find_group_key(kf, group, "ipv4only")) {
        set_flag(option->flag, IPV4ONLY);
        option->ipv4only = inip_get_integer(kf, group, "ipv4only", 1);
    }

    if (_find_group_key(kf, group, "hwm")) {
        set_flag(option->flag, HWM);
        option->hwm = inip_get_integer(kf, group, "hwm", 1);
    }

    if (_find_group_key(kf, group, "sub_num")) {
        set_flag(option->flag, SUBSCRIBE);
        option->sub_num = inip_get_integer(kf, group, "sub_num", 0);
        char *sub_list = inip_get_string(kf, group, "subscribe", NULL);
        option->subscribe = (char**) malloc(option->sub_num * sizeof(char *));
        option->subscribe[0] = strdup(strtok(sub_list, "|"));
        int i;
        for (i = 1; i < option->sub_num; i++) {
            option->subscribe[i] = strdup(strtok(NULL, "|"));
        }
        free(sub_list);
    }

    if (_find_group_key(kf, group, "unsub_num")) {
        set_flag(option->flag, UNSUBSCRIBE);
        option->unsub_num = inip_get_integer(kf, group, "unsub_num", 0);
        char *unsub_list = inip_get_string(kf, group, "unsubscribe", NULL);
        option->unsubscribe = (char**) malloc(option->unsub_num * sizeof(char *));
        option->unsubscribe[0] = strdup(strtok(unsub_list, "|"));
        int i;
        for (i = 1; i < option->unsub_num; i++) {
            option->unsubscribe[i] = strdup(strtok(NULL, "|"));
        }
        free(unsub_list);
    }

    if (_find_group_key(kf, group, "identity")) {
        set_flag(option->flag, IDENTITY);
        option->identity = inip_get_string(kf, group, "identity", NULL);
    }
}