The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test;
BEGIN { plan(tests => 2) }

use Net::Write::Layer qw(:constants);
use Net::Write::Layer3;

my $ip4 = '127.0.0.1';
my $ip6 = '::1';

ok(
   sub {
      my $fd = Net::Write::Layer3->new(
         dst => $ip4,
         protocol => NW_IPPROTO_RAW,
         family => NW_AF_INET,
      );
      eval { $fd->open; };
      if ($@) {
         if ($@ =~ /EUID 0/) {
            return 1;  # SKIP as non-root
         }
         return 0; # Error
      }
      if (! defined($fd)) {
         return 0;  # Error
      }
      if ($fd <= 0) {
         return 0;  # Error
      }
      return 1;  # OK
   },
   1,
   $@,
);

ok(
   sub {
      my $fd = Net::Write::Layer3->new(
         dst => $ip6,
         protocol => NW_IPPROTO_RAW,
         family => NW_AF_INET6,
      );
      eval { $fd->open; };
      if ($@) {
         if ($@ =~ /EUID 0/) {
            return 1;  # SKIP as non-root
         }
         elsif ($@ =~ /IPHDRINCL only supported on Linux/) {
            return 1;  # SKIP as not supported
         }
         return 0; # Error
      }
      if (! defined($fd)) {
         return 0;  # Error
      }
      if ($fd <= 0) {
         return 0;  # Error
      }
      return 1;  # OK
   },
   1,
   $@,
);