txt: ## dist_github-jpve-Net-Packet.md
  # Net::Packet (Perl6)
  
  Perl6 module for decoding network packets. Encoding/Generating packets is on the TODO list.
  
  The modules are written in pure Perl6. Both the `Buf` and the `C_Buf` class can be used as frames to decode. (`C_Buf` from the perl6-net-pcap module).
  
  The following protocols are implemented: Ethernet, IPv4, UDP and ARP. Each protocol has its own module `Net::Packet::*`.
  
  ## Documentation
  
  All modules are documented using in-file Pod. The in-file Pods are rendered to Markdown formatted files in the [docs/](/docs) directory.
  
  ## Installation
  
  Using panda:
  
  ```
  $ panda update
  $ panda install Net::Packet
  
  ```
  
  Using ufo:
  
  ```
  $ ufo          # Generates Makefile
  $ make
  $ make test
  $ make install
  
  ```
  
  ## Usage:
  
  ```
  use Net::Packet::Ethernet :short; # use :short for short notation:
  use Net::Packet::IPv4 :short;     #   Ethernet.decode
  use Net::Packet::UDP :short;      # instead of
                                    #   Net::Packet::Ethernet.decode
  
  my $pkt = Buf.new([...]);
  
  my $eth = Ethernet.decode($pkt);
  printf "%s -> %s: ", $eth.src.Str, $eth.dst.Str;
  # use .Str or .Int to convert .src/.dst to something usable.
  
  my $ip  = IPv4.decode($eth.data, $eth);
  printf "%s -> %s: ", $ip.src.Str, $ip.src.Str;
  
  my $udp = UDP.decode($ip.data, $ip);
  printf "%d -> %d\n", $udp.src_port, $udp.dst_port;
  
  ```
  
  ```
  use Net::Ethernet :short;
  
  my $pkt = Buf.new([...]);
  
  my $eth = Ethernet.decode($pkt);
  printf "%s -> %s: ", $eth.src.Str, $eth.dst.Str;
  
  if $eth.pl ~~ IPv4 { # .pl (for PayLoad) decodes the payload
     printf "%s -> %s: ", $eth.pl.src.Str, $eth.pl.dst.Str;
        
     if $eth.pl.pl ~~ UDP {
        printf "%d -> %d: ", $eth.pl.pl.src_port, $eth.pl.pl.dst_port;
     }
  }
  
  ```
  