VALUE set_if_hash(VALUE rb_if_hash, struct ifaddrs *ifa, int family){
    char *if_host, *if_netmask, *if_name;
    if_name = get_if_name(ifa);
    if_host = malloc(sizeof(char) * NI_MAXHOST);
    if (! get_if_host(ifa, if_host))
        rb_raise(rb_eSystemCallError, "Can't get IP from %s", if_name);

    if_netmask = malloc(sizeof(char) * NI_MAXHOST);
    if (! get_if_netmask(ifa, if_netmask))
        rb_raise(rb_eSystemCallError, "Can't get IP from %s", if_name);

    char *str_inet_name = "inet_addr_v4";
    char *str_inet_name6 = "inet_addr_v6";
    char *str_netmask_name = "netmask_v4";
    char *str_netmask_name6 = "netmask_v6";
    VALUE rb_if_data_hash = rb_hash_aref(rb_if_hash, rb_str_intern(rb_str_new2(if_name)));

    if (rb_if_data_hash == Qnil) {
        rb_if_data_hash = rb_hash_new();
        rb_hash_aset(rb_if_hash,
            rb_str_intern(rb_str_new2(if_name)),
            rb_if_data_hash);
    }

    rb_hash_aset(rb_if_data_hash,
        rb_str_intern(rb_str_new2((family == AF_INET) ? str_inet_name : str_inet_name6)),
        rb_str_new2(if_host));
    rb_hash_aset(rb_if_data_hash,
        rb_str_intern(rb_str_new2((family == AF_INET) ? str_netmask_name : str_netmask_name6)),
        rb_str_new2(if_netmask));
    return rb_if_data_hash;
}
Exemple #2
0
NetworkInterface* Ntop::getHistoricalInterface() {
  return (getInterface(get_if_name(historical_interface_id))); 
};