network_interface 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d0cb4999f24c11d163ca55348ddeabe91595407a8ca2440ea04c2c4f172e717
4
- data.tar.gz: d1b2f9f5bec054bc222b77a2a19d72646c844151f9b0bfe2bf4a184d2a1dc90a
3
+ metadata.gz: 758a87463cdbf1569ad80a19c47a95e2c91e1eacb6cace97885d84cad09fd8a9
4
+ data.tar.gz: 6599981462fab25a7914b847f9ddbf42fabf7c260ad3501e3ab3441100e6a6ed
5
5
  SHA512:
6
- metadata.gz: 0a3f59b944c17959dc30d92a86a8730c7993030fd93f8e7d9560d6e23d51b884c6232be64339660343950b80eb26fba5b5fc1d7dd24a94d0125f8d0e25c9afb3
7
- data.tar.gz: 6f2b20d6e6314a4f86cc5c9cb82ff31bdea177737ff42d5f5457bc07749571a4ed576b72dbb18aed2a8889846ec0fabf1f8db9d72969ee0192d1a8622b0e69f7
6
+ metadata.gz: bf7eaade6035c18e9120a75c0eb86ab2303f9b7ea76f96f6e33b8e256874f854550144f3350309fb6291f2ddd1b78afda9269054c1f3c601ff910c1c6fdeac78
7
+ data.tar.gz: f5903780de195f98824f5ccdbbee8f749f21094d1885d1e1de5f7d0067ba1c65a3fba1c4ce820bddcf1a48a54ad47b597507bad9ad29bd290fa22a20add80737
checksums.yaml.gz.sig CHANGED
Binary file
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- network_interface (0.0.3)
4
+ network_interface (0.0.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # NetworkInterface
2
2
 
3
- TODO: Write a gem description
3
+ A simple Ruby wrapper for accessing network interface information
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,75 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ ```ruby
22
+ require 'network_interface'
23
+
24
+ puts NetworkInterface.interfaces
25
+ puts NetworkInterface.addresses('eth0')
26
+ ```
27
+
28
+ ## Development
29
+
30
+ Compiling:
31
+
32
+ ```
33
+ bundle install
34
+ bundle exec rake clean
35
+ bundle exec rake compile
36
+ ```
37
+
38
+ Running the test suite, requires `ifconfig`/`ipconfig` to be installed:
39
+
40
+ ```
41
+ bundle exec rspec
42
+ ```
43
+
44
+ To debug with GDB:
45
+
46
+ 1. Optional: Explicitly add `asm("int3");` into the C code that you wish to have a breakpoint for:
47
+
48
+ ```c
49
+ VALUE rb_cNetworkInterface;
50
+ void
51
+ Init_network_interface_ext()
52
+ {
53
+ asm("int3");
54
+
55
+ // ...
56
+ }
57
+ ```
58
+
59
+ 2. Compile and start GDB:
60
+
61
+ ```shell
62
+ bundle exec rake compile
63
+ gdb run --args ruby -e '$LOAD_PATH.unshift(File.join(Dir.pwd, "lib")); require("network_interface"); puts NetworkInterface.interfaces'
64
+ ```
65
+
66
+ 3. Add a runtime breakpoint:
67
+
68
+ ```shell
69
+ (gdb) add-symbol-file ./lib/network_interface_ext.so
70
+ Reading symbols from ./lib/network_interface_ext.so...
71
+
72
+ (gdb) break Init_network_interface_ext
73
+ Breakpoint 1 at 0x1850: file ../../../../ext/network_interface_ext/netifaces.c, line 825.
74
+
75
+ (gdb) run
76
+ Starting program: /usr/bin/ruby -e \$LOAD_PATH.unshift\(File.join\(Dir.pwd,\ \"lib\"\)\)\;\ require\(\"network_interface\"\)\;\ puts\ NetworkInterface.interfaces
77
+ [Thread debugging using libthread_db enabled]
78
+ Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
79
+
80
+ Breakpoint 1.2, Init_network_interface_ext () at ../../../../ext/network_interface_ext/netifaces.c:825
81
+ 825 rb_cNetworkInterface = rb_define_module("NetworkInterface");
82
+ (gdb)
83
+ ```
84
+
85
+ To use a development build of this gem in another project, add this to the target project's `Gemfile`:
86
+
87
+ ```
88
+ gem 'network_interface', path: '../network_interface'
89
+ ```
22
90
 
23
91
  ## Contributing
24
92
 
@@ -1,6 +1,9 @@
1
1
  #include "ruby.h"
2
2
  #include "netifaces.h"
3
3
 
4
+ VALUE rb_cNetworkInterface;
5
+ VALUE rb_cNetworkInterfaceError;
6
+
4
7
  #if !defined(WIN32)
5
8
  #if !HAVE_GETNAMEINFO
6
9
  #undef getnameinfo
@@ -245,7 +248,7 @@ rbnetifaces_s_addresses (VALUE class, VALUE dev)
245
248
 
246
249
  if (!pAdapterInfo)
247
250
  {
248
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
251
+ rb_raise(rb_cNetworkInterfaceError, "Could not malloc ADAPTER_INFO");
249
252
  return Qnil;
250
253
  }
251
254
  }
@@ -256,7 +259,7 @@ rbnetifaces_s_addresses (VALUE class, VALUE dev)
256
259
  {
257
260
  if (pAdapterInfo)
258
261
  free (pAdapterInfo);
259
- rb_raise(rb_eRuntimeError, "Unable to obtain adapter information.");
262
+ rb_raise(rb_cNetworkInterfaceError, "Unable to obtain adapter information via GetAdaptersInfo");
260
263
  return Qnil;
261
264
  }
262
265
 
@@ -347,7 +350,7 @@ rbnetifaces_s_addresses (VALUE class, VALUE dev)
347
350
  #elif HAVE_GETIFADDRS
348
351
  if (getifaddrs (&addrs) < 0)
349
352
  {
350
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
353
+ rb_raise(rb_cNetworkInterfaceError, "Unable to retrieve network interface info via getifaddrs");
351
354
  }
352
355
 
353
356
  for (addr = addrs; addr; addr = addr->ifa_next)
@@ -401,7 +404,7 @@ rbnetifaces_s_addresses (VALUE class, VALUE dev)
401
404
 
402
405
  if (sock < 0)
403
406
  {
404
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
407
+ rb_raise(rb_cNetworkInterfaceError, "Socket not created");
405
408
  return Qnil;
406
409
  }
407
410
 
@@ -530,7 +533,6 @@ rbnetifaces_s_addresses (VALUE class, VALUE dev)
530
533
  return Qnil;
531
534
 
532
535
  }
533
-
534
536
  VALUE
535
537
  rbnetifaces_s_interfaces (VALUE self)
536
538
  {
@@ -566,7 +568,7 @@ rbnetifaces_s_interfaces (VALUE self)
566
568
 
567
569
  if (!pAdapterInfo)
568
570
  {
569
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
571
+ rb_raise(rb_cNetworkInterfaceError, "Could not malloc ADAPTER_INFO");
570
572
  }
571
573
  }
572
574
  } while (dwRet == ERROR_BUFFER_OVERFLOW);
@@ -577,7 +579,7 @@ rbnetifaces_s_interfaces (VALUE self)
577
579
  if (pAdapterInfo)
578
580
  free (pAdapterInfo);
579
581
 
580
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
582
+ rb_raise(rb_cNetworkInterfaceError, "Unable to retrieve adapter info via GetAdaptersInfo");
581
583
  return Qnil;
582
584
  }
583
585
  if (dwRet == ERROR_NO_DATA)
@@ -606,7 +608,7 @@ rbnetifaces_s_interfaces (VALUE self)
606
608
  #elif HAVE_GETIFADDRS
607
609
  if (getifaddrs (&addrs) < 0)
608
610
  {
609
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
611
+ rb_raise(rb_cNetworkInterfaceError, "Unable to retrieve adapter info via getifaddrs");
610
612
  }
611
613
 
612
614
  for (addr = addrs; addr; addr = addr->ifa_next)
@@ -628,7 +630,7 @@ rbnetifaces_s_interfaces (VALUE self)
628
630
  fd = socket (AF_INET, SOCK_DGRAM, 0);
629
631
  len = -1;
630
632
  if (fd < 0) {
631
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
633
+ rb_raise(rb_cNetworkInterfaceError, "Error creating socket");
632
634
  return Qnil;
633
635
  }
634
636
 
@@ -661,7 +663,7 @@ rbnetifaces_s_interfaces (VALUE self)
661
663
 
662
664
  if (!ifc.CNAME(ifc_buf)) {
663
665
  close (fd);
664
- rb_raise(rb_eRuntimeError, "Not enough memory");
666
+ rb_raise(rb_cNetworkInterfaceError, "Not enough memory");
665
667
  return Qnil;
666
668
  }
667
669
 
@@ -673,7 +675,7 @@ rbnetifaces_s_interfaces (VALUE self)
673
675
  #endif
674
676
  free (ifc.CNAME(ifc_req));
675
677
  close (fd);
676
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
678
+ rb_raise(rb_cNetworkInterfaceError, "Unable to calculate buffer size");
677
679
  return Qnil;
678
680
  }
679
681
 
@@ -724,7 +726,7 @@ rbnetifaces_s_interface_info (VALUE self, VALUE dev)
724
726
 
725
727
  if (!pAdapterInfo)
726
728
  {
727
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
729
+ rb_raise(rb_cNetworkInterfaceError, "Could not malloc ADAPTER_INFO");
728
730
  }
729
731
  }
730
732
  } while (dwRet == ERROR_BUFFER_OVERFLOW);
@@ -735,7 +737,7 @@ rbnetifaces_s_interface_info (VALUE self, VALUE dev)
735
737
  if (pAdapterInfo)
736
738
  free (pAdapterInfo);
737
739
 
738
- rb_raise(rb_eRuntimeError, "Unknow error at OS level");
740
+ rb_raise(rb_cNetworkInterfaceError, "Unable to obtain adapter information via GetAdaptersInfo");
739
741
  return Qnil;
740
742
  }
741
743
  if (dwRet == ERROR_NO_DATA)
@@ -817,11 +819,11 @@ rbnetifaces_s_interface_info (VALUE self, VALUE dev)
817
819
  return result;
818
820
  }
819
821
 
820
- VALUE rb_cNetworkInterface;
821
822
  void
822
823
  Init_network_interface_ext()
823
824
  {
824
825
  rb_cNetworkInterface = rb_define_module("NetworkInterface");
826
+ rb_cNetworkInterfaceError = rb_define_class_under(rb_cNetworkInterface, "Error", rb_eRuntimeError);
825
827
  rb_define_module_function(rb_cNetworkInterface, "interfaces", rbnetifaces_s_interfaces, 0);
826
828
  rb_define_module_function(rb_cNetworkInterface, "addresses", rbnetifaces_s_addresses, 1);
827
829
  rb_define_module_function(rb_cNetworkInterface, "interface_info", rbnetifaces_s_interface_info, 1);
@@ -1,3 +1,3 @@
1
1
  module NetworkInterface
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: network_interface
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Turner
@@ -94,7 +94,7 @@ cert_chain:
94
94
  EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
95
95
  9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
96
96
  -----END CERTIFICATE-----
97
- date: 2023-08-14 00:00:00.000000000 Z
97
+ date: 2023-08-17 00:00:00.000000000 Z
98
98
  dependencies:
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: rake
metadata.gz.sig CHANGED
Binary file