ifaddr.c: get_ifaddrs
* ext/socket/ifaddr.c (get_ifaddrs): extract ifaddrs from Socket::Ifaddr. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61404 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6e0074d0ff
commit
70001d5fda
@ -84,6 +84,12 @@ get_ifaddr(VALUE self)
|
|||||||
return rifaddr;
|
return rifaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct ifaddrs *
|
||||||
|
get_ifaddrs(VALUE self)
|
||||||
|
{
|
||||||
|
return get_ifaddr(self)->ifaddr;
|
||||||
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
rsock_getifaddrs(void)
|
rsock_getifaddrs(void)
|
||||||
{
|
{
|
||||||
@ -140,8 +146,7 @@ rsock_getifaddrs(void)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ifaddr_name(VALUE self)
|
ifaddr_name(VALUE self)
|
||||||
{
|
{
|
||||||
rb_ifaddr_t *rifaddr = get_ifaddr(self);
|
struct ifaddrs *ifa = get_ifaddrs(self);
|
||||||
struct ifaddrs *ifa = rifaddr->ifaddr;
|
|
||||||
return rb_str_new_cstr(ifa->ifa_name);
|
return rb_str_new_cstr(ifa->ifa_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,8 +161,7 @@ ifaddr_name(VALUE self)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ifaddr_ifindex(VALUE self)
|
ifaddr_ifindex(VALUE self)
|
||||||
{
|
{
|
||||||
rb_ifaddr_t *rifaddr = get_ifaddr(self);
|
struct ifaddrs *ifa = get_ifaddrs(self);
|
||||||
struct ifaddrs *ifa = rifaddr->ifaddr;
|
|
||||||
unsigned int ifindex = if_nametoindex(ifa->ifa_name);
|
unsigned int ifindex = if_nametoindex(ifa->ifa_name);
|
||||||
if (ifindex == 0) {
|
if (ifindex == 0) {
|
||||||
rb_raise(rb_eArgError, "invalid interface name: %s", ifa->ifa_name);
|
rb_raise(rb_eArgError, "invalid interface name: %s", ifa->ifa_name);
|
||||||
@ -178,8 +182,7 @@ ifaddr_ifindex(VALUE self)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ifaddr_flags(VALUE self)
|
ifaddr_flags(VALUE self)
|
||||||
{
|
{
|
||||||
rb_ifaddr_t *rifaddr = get_ifaddr(self);
|
struct ifaddrs *ifa = get_ifaddrs(self);
|
||||||
struct ifaddrs *ifa = rifaddr->ifaddr;
|
|
||||||
return IFAFLAGS2NUM(ifa->ifa_flags);
|
return IFAFLAGS2NUM(ifa->ifa_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,8 +197,7 @@ ifaddr_flags(VALUE self)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ifaddr_addr(VALUE self)
|
ifaddr_addr(VALUE self)
|
||||||
{
|
{
|
||||||
rb_ifaddr_t *rifaddr = get_ifaddr(self);
|
struct ifaddrs *ifa = get_ifaddrs(self);
|
||||||
struct ifaddrs *ifa = rifaddr->ifaddr;
|
|
||||||
if (ifa->ifa_addr)
|
if (ifa->ifa_addr)
|
||||||
return rsock_sockaddr_obj(ifa->ifa_addr, rsock_sockaddr_len(ifa->ifa_addr));
|
return rsock_sockaddr_obj(ifa->ifa_addr, rsock_sockaddr_len(ifa->ifa_addr));
|
||||||
return Qnil;
|
return Qnil;
|
||||||
@ -212,8 +214,7 @@ ifaddr_addr(VALUE self)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ifaddr_netmask(VALUE self)
|
ifaddr_netmask(VALUE self)
|
||||||
{
|
{
|
||||||
rb_ifaddr_t *rifaddr = get_ifaddr(self);
|
struct ifaddrs *ifa = get_ifaddrs(self);
|
||||||
struct ifaddrs *ifa = rifaddr->ifaddr;
|
|
||||||
if (ifa->ifa_netmask)
|
if (ifa->ifa_netmask)
|
||||||
return rsock_sockaddr_obj(ifa->ifa_netmask, rsock_sockaddr_len(ifa->ifa_netmask));
|
return rsock_sockaddr_obj(ifa->ifa_netmask, rsock_sockaddr_len(ifa->ifa_netmask));
|
||||||
return Qnil;
|
return Qnil;
|
||||||
@ -230,8 +231,7 @@ ifaddr_netmask(VALUE self)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ifaddr_broadaddr(VALUE self)
|
ifaddr_broadaddr(VALUE self)
|
||||||
{
|
{
|
||||||
rb_ifaddr_t *rifaddr = get_ifaddr(self);
|
struct ifaddrs *ifa = get_ifaddrs(self);
|
||||||
struct ifaddrs *ifa = rifaddr->ifaddr;
|
|
||||||
if ((ifa->ifa_flags & IFF_BROADCAST) && ifa->ifa_broadaddr)
|
if ((ifa->ifa_flags & IFF_BROADCAST) && ifa->ifa_broadaddr)
|
||||||
return rsock_sockaddr_obj(ifa->ifa_broadaddr, rsock_sockaddr_len(ifa->ifa_broadaddr));
|
return rsock_sockaddr_obj(ifa->ifa_broadaddr, rsock_sockaddr_len(ifa->ifa_broadaddr));
|
||||||
return Qnil;
|
return Qnil;
|
||||||
@ -248,8 +248,7 @@ ifaddr_broadaddr(VALUE self)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ifaddr_dstaddr(VALUE self)
|
ifaddr_dstaddr(VALUE self)
|
||||||
{
|
{
|
||||||
rb_ifaddr_t *rifaddr = get_ifaddr(self);
|
struct ifaddrs *ifa = get_ifaddrs(self);
|
||||||
struct ifaddrs *ifa = rifaddr->ifaddr;
|
|
||||||
if ((ifa->ifa_flags & IFF_POINTOPOINT) && ifa->ifa_dstaddr)
|
if ((ifa->ifa_flags & IFF_POINTOPOINT) && ifa->ifa_dstaddr)
|
||||||
return rsock_sockaddr_obj(ifa->ifa_dstaddr, rsock_sockaddr_len(ifa->ifa_dstaddr));
|
return rsock_sockaddr_obj(ifa->ifa_dstaddr, rsock_sockaddr_len(ifa->ifa_dstaddr));
|
||||||
return Qnil;
|
return Qnil;
|
||||||
@ -267,8 +266,7 @@ ifaddr_dstaddr(VALUE self)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ifaddr_vhid(VALUE self)
|
ifaddr_vhid(VALUE self)
|
||||||
{
|
{
|
||||||
rb_ifaddr_t *rifaddr = get_ifaddr(self);
|
struct ifaddrs *ifa = get_ifaddrs(self);
|
||||||
struct ifaddrs *ifa = rifaddr->ifaddr;
|
|
||||||
if (ifa->ifa_data)
|
if (ifa->ifa_data)
|
||||||
return (INT2FIX(((struct if_data*)ifa->ifa_data)->ifi_vhid));
|
return (INT2FIX(((struct if_data*)ifa->ifa_data)->ifi_vhid));
|
||||||
else
|
else
|
||||||
@ -358,12 +356,9 @@ ifaddr_inspect_flags(ifa_flags_t flags, VALUE result)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ifaddr_inspect(VALUE self)
|
ifaddr_inspect(VALUE self)
|
||||||
{
|
{
|
||||||
rb_ifaddr_t *rifaddr = get_ifaddr(self);
|
struct ifaddrs *ifa = get_ifaddrs(self);
|
||||||
struct ifaddrs *ifa;
|
|
||||||
VALUE result;
|
VALUE result;
|
||||||
|
|
||||||
ifa = rifaddr->ifaddr;
|
|
||||||
|
|
||||||
result = rb_str_new_cstr("#<");
|
result = rb_str_new_cstr("#<");
|
||||||
|
|
||||||
rb_str_append(result, rb_class_name(CLASS_OF(self)));
|
rb_str_append(result, rb_class_name(CLASS_OF(self)));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user