Class: Socket::Ifaddr

Inherits:
Data
  • Object
show all
Defined in:
ifaddr.c,
ifaddr.c

Overview

Socket::Ifaddr represents a result of getifaddrs() function.

Instance Method Summary collapse

Instance Method Details

#addrObject

Returns the address of ifaddr. nil is returned if address is not available in ifaddr.


197
198
199
200
201
202
203
204
# File 'ifaddr.c', line 197

static VALUE
ifaddr_addr(VALUE self)
{
    struct ifaddrs *ifa = get_ifaddrs(self);
    if (ifa->ifa_addr)
        return rsock_sockaddr_obj(ifa->ifa_addr, rsock_sockaddr_len(ifa->ifa_addr));
    return Qnil;
}

#broadaddrObject

Returns the broadcast address of ifaddr. nil is returned if the flags doesn't have IFF_BROADCAST.


231
232
233
234
235
236
237
238
# File 'ifaddr.c', line 231

static VALUE
ifaddr_broadaddr(VALUE self)
{
    struct ifaddrs *ifa = get_ifaddrs(self);
    if ((ifa->ifa_flags & IFF_BROADCAST) && ifa->ifa_broadaddr)
        return rsock_sockaddr_obj(ifa->ifa_broadaddr, rsock_sockaddr_len(ifa->ifa_broadaddr));
    return Qnil;
}

#dstaddrObject

Returns the destination address of ifaddr. nil is returned if the flags doesn't have IFF_POINTOPOINT.


248
249
250
251
252
253
254
255
# File 'ifaddr.c', line 248

static VALUE
ifaddr_dstaddr(VALUE self)
{
    struct ifaddrs *ifa = get_ifaddrs(self);
    if ((ifa->ifa_flags & IFF_POINTOPOINT) && ifa->ifa_dstaddr)
        return rsock_sockaddr_obj(ifa->ifa_dstaddr, rsock_sockaddr_len(ifa->ifa_dstaddr));
    return Qnil;
}

#flagsInteger

Returns the flags of ifaddr.

Returns:

  • (Integer)

182
183
184
185
186
187
# File 'ifaddr.c', line 182

static VALUE
ifaddr_flags(VALUE self)
{
    struct ifaddrs *ifa = get_ifaddrs(self);
    return IFAFLAGS2NUM(ifa->ifa_flags);
}

#ifindexInteger

Returns the interface index of ifaddr.

Returns:

  • (Integer)

161
162
163
164
165
166
167
168
169
170
# File 'ifaddr.c', line 161

static VALUE
ifaddr_ifindex(VALUE self)
{
    struct ifaddrs *ifa = get_ifaddrs(self);
    unsigned int ifindex = if_nametoindex(ifa->ifa_name);
    if (ifindex == 0) {
        rb_raise(rb_eArgError, "invalid interface name: %s", ifa->ifa_name);
    }
    return UINT2NUM(ifindex);
}

#inspectString

Returns a string to show contents of ifaddr.

Returns:

  • (String)

356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
# File 'ifaddr.c', line 356

static VALUE
ifaddr_inspect(VALUE self)
{
    struct ifaddrs *ifa = get_ifaddrs(self);
    VALUE result;

    result = rb_str_new_cstr("#<");

    rb_str_append(result, rb_class_name(CLASS_OF(self)));
    rb_str_cat2(result, " ");
    rb_str_cat2(result, ifa->ifa_name);

    if (ifa->ifa_flags)
        ifaddr_inspect_flags(ifa->ifa_flags, result);

    if (ifa->ifa_addr) {
      rb_str_cat2(result, " ");
      rsock_inspect_sockaddr(ifa->ifa_addr,
          rsock_sockaddr_len(ifa->ifa_addr),
          result);
    }
    if (ifa->ifa_netmask) {
      rb_str_cat2(result, " netmask=");
      rsock_inspect_sockaddr(ifa->ifa_netmask,
          rsock_sockaddr_len(ifa->ifa_netmask),
          result);
    }

    if ((ifa->ifa_flags & IFF_BROADCAST) && ifa->ifa_broadaddr) {
      rb_str_cat2(result, " broadcast=");
      rsock_inspect_sockaddr(ifa->ifa_broadaddr,
          rsock_sockaddr_len(ifa->ifa_broadaddr),
          result);
    }

    if ((ifa->ifa_flags & IFF_POINTOPOINT) && ifa->ifa_dstaddr) {
      rb_str_cat2(result, " dstaddr=");
      rsock_inspect_sockaddr(ifa->ifa_dstaddr,
          rsock_sockaddr_len(ifa->ifa_dstaddr),
          result);
    }

    rb_str_cat2(result, ">");
    return result;
}

#nameString

Returns the interface name of ifaddr.

Returns:

  • (String)

146
147
148
149
150
151
# File 'ifaddr.c', line 146

static VALUE
ifaddr_name(VALUE self)
{
    struct ifaddrs *ifa = get_ifaddrs(self);
    return rb_str_new_cstr(ifa->ifa_name);
}

#netmaskObject

Returns the netmask address of ifaddr. nil is returned if netmask is not available in ifaddr.


214
215
216
217
218
219
220
221
# File 'ifaddr.c', line 214

static VALUE
ifaddr_netmask(VALUE self)
{
    struct ifaddrs *ifa = get_ifaddrs(self);
    if (ifa->ifa_netmask)
        return rsock_sockaddr_obj(ifa->ifa_netmask, rsock_sockaddr_len(ifa->ifa_netmask));
    return Qnil;
}

#vhidInteger

Returns the vhid address of ifaddr. nil is returned if there is no vhid.

Returns:

  • (Integer)

266
267
268
269
270
271
272
273
274
# File 'ifaddr.c', line 266

static VALUE
ifaddr_vhid(VALUE self)
{
    struct ifaddrs *ifa = get_ifaddrs(self);
    if (ifa->ifa_data)
        return (INT2FIX(((struct if_data*)ifa->ifa_data)->ifi_vhid));
    else
        return Qnil;
}