code: def extract_frames(self, bpf_buffer):
            # noqa: E501
  
          # Ensure that the BPF buffer contains at least the header
          len_bb = len(bpf_buffer)
          if len_bb < 20:  # Note: 20 == sizeof(struct bfp_hdr)
              return
  
          # Extract useful information from the BPF header
          if FREEBSD or NETBSD:
              # struct bpf_xhdr or struct bpf_hdr32
              bh_tstamp_offset = 16
          else:
              # struct bpf_hdr
              bh_tstamp_offset = 8
  
          # Parse the BPF header
          bh_caplen = struct.unpack('I', bpf_buffer[bh_tstamp_offset:bh_tstamp_offset + 4])[0]  # noqa: E501
          next_offset = bh_tstamp_offset + 4
          bh_datalen = struct.unpack('I', bpf_buffer[next_offset:next_offset + 4])[0]  # noqa: E501
          next_offset += 4
          bh_hdrlen = struct.unpack('H', bpf_buffer[next_offset:next_offset + 2])[0]  # noqa: E501
          if bh_datalen == 0:
              return
  
          # Get and store the Scapy object
          frame_str = bpf_buffer[bh_hdrlen:bh_hdrlen + bh_caplen]
          try:
              pkt = self.guessed_cls(frame_str)
          except Exception:
              if conf.debug_dissector:
                  raise
              pkt = conf.raw_layer(frame_str)
          self.received_frames.append(pkt)
  
          # Extract the next frame
          end = self.bpf_align(bh_hdrlen, bh_caplen)
          if (len_bb - end) >= 20:
              self.extract_frames(bpf_buffer[end:])
docs: Extract all frames from the buffer and stored them in the received list.