# PCAP file library

## Introduction

Ryu PCAP file library helps you to read/write PCAP file which file format are described in The Wireshark Wiki.

## Reading PCAP file

For loading the packet data containing in PCAP files, you can use pcaplib.Reader.

class `ryu.lib.pcaplib.``Reader`(file_obj)

  PCAP file reader

  Argument | Description
  --- | ---
  file_obj | File object which reading PCAP file in binary mode

  Example of usage:

      from ryu.lib import pcaplib
      from ryu.lib.packet import packet

      frame_count = 0
      # iterate pcaplib.Reader that yields (timestamp, packet_data)
      # in the PCAP file
      for ts, buf in pcaplib.Reader(open('test.pcap', 'rb')):
          frame_count += 1
          pkt = packet.Packet(buf)
          print("%d, %f, %s" % (frame_count, ts, pkt))

## Writing PCAP file

For dumping the packet data which your RyuApp received, you can use pcaplib.Writer.

class `ryu.lib.pcaplib.``Writer`(file_obj, snaplen=65535, network=1)

  PCAP file writer

  Argument | Description
  --- | ---
  file_obj | File object which writing PCAP file in binary mode
  snaplen | Max length of captured packets (in octets)
  network | Data link type. (e.g. 1 for Ethernet, see tcpdump.org for details)

  Example of usage:

      ...
      from ryu.lib import pcaplib

      class SimpleSwitch13(app_manager.RyuApp):
          OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

          def __init__(self, *args, **kwargs):
              super(SimpleSwitch13, self).__init__(*args, **kwargs)
              self.mac_to_port = {}

              # Create pcaplib.Writer instance with a file object
              # for the PCAP file
              self.pcap_writer = pcaplib.Writer(open('mypcap.pcap', 'wb'))

          ...

          @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
          def _packet_in_handler(self, ev):
              # Dump the packet data into PCAP file
              self.pcap_writer.write_pkt(ev.msg.data)

              ...