Exemple #1
0
static int tish_uname(char * argv[])
{
    char * arg = argv[1];
    int mib[2];
    int len;
    size_t str_len;
    char type[20];
    char rele[40] = "";
    char vers[40] = "";

    len = sysctlnametomib("kern.ostype", mib, num_elem(mib));
    str_len = sizeof(type);
    sysctl(mib, len, &type, &str_len, 0, 0);

    if (arg && !strcmp(arg, "-a")) {
        len = sysctlnametomib("kern.osrelease", mib, num_elem(mib));
        str_len = sizeof(rele);
        sysctl(mib, len, &rele, &str_len, 0, 0);

        len = sysctlnametomib("kern.version", mib, num_elem(mib));
        str_len = sizeof(vers);
        sysctl(mib, len, &vers, &str_len, 0, 0);
    }

    printf("%s %s %s\n", type, rele, vers);

    return 0;
}
Exemple #2
0
static int tish_ikut(char * argv[])
{
    int mib_test[5];
    int mib_cur[5];
    int mib_next[5];
    size_t len_cur, len_next;
    const int one = 1;

    const size_t len_test = sysctlnametomib("debug.test", mib_test,
            num_elem(mib_test));

    printf("     \n"); /* Hack */
    print_mib_name(mib_test, len_test);

    memcpy(mib_cur, mib_test, len_test * sizeof(int));
    len_cur = len_test;

    while ((len_next = sizeof(mib_next)),
           sysctlgetnext(mib_cur, len_cur, mib_next, &len_next) == 0) {
        if (!sysctltstmib(mib_next, mib_test, len_test)) {
            printf("End of tests\n");
            break; /* EOF debug.test */
        }
        memcpy(mib_cur, mib_next, len_next * sizeof(int));
        len_cur = len_next;

        print_mib_name(mib_cur, len_cur);
        sysctl(mib_cur, len_cur, 0, 0, (void *)(&one), sizeof(one));
    }

    return 0;
}
Exemple #3
0
static int
num_elem(int height)
{
    if (height < 0)
        return 0;
    return (1 << height) + num_elem(height - 1);
}
Exemple #4
0
static int getset_parm(char * arg)
{
    char * name;
    char * value;
    char * rest;

    int mib[CTL_MAXNAME];
    char fmt[5];
    unsigned int kind;
    int ctltype;
    size_t dlen;

    name = strtok_r(arg, "=", &rest);
    value = strtok_r(0, "=", &rest);
    if (!name) {
        printf("Invalid argument\n");

        errno = EINVAL;
        return -1;
    }

    const int mib_len = sysctlnametomib(name, mib, num_elem(mib));
    if (mib_len < 0) {
        printf("Node not found\n");

        return -1;
    }

    printf("%s = ", name);

    if (sysctloidfmt(mib, mib_len, fmt, &kind)) {
        printf("Invalid node\n");

        return -1;
    }
    if (sysctl(mib, mib_len, 0, &dlen, 0, 0)) {
        printf("Invalid node\n");

        return -1;
    }

    ctltype = (kind & CTLTYPE);
    switch (ctltype) {
    case CTLTYPE_STRING:
        return getset_svalue(mib, mib_len, dlen, value, strnlen(value, 80));
    case CTLTYPE_INT:
    case CTLTYPE_UINT:
        return getset_ivalue(mib, mib_len, dlen, value, sizeof(int));
    case CTLTYPE_LONG:
    case CTLTYPE_ULONG:
    case CTLTYPE_S64:
    case CTLTYPE_U64:
        printf("Data type not supported yet\n");
        break;
    }

    return 0;
}
Exemple #5
0
static void arp_cache_update(int delta_time)
{
    size_t i;

    for (i = 0; i < num_elem(arp_cache); i++) {
        struct arp_cache_entry * entry = &arp_cache[i];

        if (entry->age > ARP_CACHE_AGE_MAX) {
            entry->age = ARP_CACHE_FREE;
        } else if (entry->age >= 0) {
            entry->age += delta_time;
        }
    }
}
Exemple #6
0
int arp_cache_insert(in_addr_t ip_addr, const mac_addr_t haddr,
                     enum arp_cache_entry_type type)
{
    size_t i;
    struct arp_cache_entry * it;
    struct arp_cache_entry * entry = NULL;

    if (ip_addr == 0) {
        return 0;
    }

    it = arp_cache;
    for (i = 0; i < num_elem(arp_cache); i++) {
        if (it->age == ARP_CACHE_FREE) {
            entry = it;
        } else if ((entry && entry->age > it->age) ||
                   (!entry && it->age >= 0)) {
            entry = it;
        }
        /* TODO Use RB_FIND first */
        if (it->ip_addr == ip_addr) {
            /* This is a replacement for an existing entry. */
            entry = it;
            break;
        }
        it++;
    }
    if (!entry) {
        errno = ENOMEM;
        return -1;
    } else if (entry->age >= 0) {
        RB_REMOVE(arp_cache_tree, &arp_cache_head, entry);
    }

    entry->ip_addr = ip_addr;
    memcpy(entry->haddr, haddr, sizeof(mac_addr_t));
    entry->age = (int)type;
    RB_INSERT(arp_cache_tree, &arp_cache_head, entry);

    return 0;
}
Exemple #7
0
/*
 * Some pthread implementations requires that the stack size is a
 * multiple of the size of a page
 */
static int
stack_sz(int depth)
{
    int sz = (num_elem(depth) * sizeof(struct node) + STACK_WORK_SZ);
    return (sz + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1);
}