docs: def matches_packet(self, pkt):
          '''
          Return True if the given packet matches this match object.
          '''
          match = []
          wildbits = _make_bitmap(self._wildcards)
          for mf,pkttuple in OpenflowMatch._match_field_to_packet.items():
              mf = "_{}".format(mf)
  
              # if the attribute is a network address, respect the bits
              if mf == '_nw_src' or mf == '_nw_dst':
                  # FIXME: clean me up.  lots of dup w/above and below :(
                  wattr = "{}_wildcard".format(mf)
                  bits = 32 - getattr(self, wattr)
                  if bits < 32:
                      netaddr = ip_network("{}/{}".format(getattr(self, mf), bits), strict=False)
                      for pktcls,field in pkttuple: 
                          if pkt.has_header(pktcls):
                              match.append(getattr(pkt[pktcls], field) in netaddr)
                      continue
  
              # if attribute is simple wildcard, just ignore the attr
              elif _wildcard_attr_map[mf].value & wildbits:
                  continue
  
              # compare concrete values in packet with match object value
              for pktcls,field in pkttuple:
                  if pkt.has_header(pktcls):
                      match.append(getattr(pkt[pktcls], field) == getattr(self, mf))
          return all(match)