Return True if the given packet matches this match object.

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)