def matches_entry(self, othermatch, strict=False):
        '''
        Return True if this match object matches another
        match object (e.g., a flow table entry).

        NB: from OF 1.0 spec:
        A match occurs "when a flow entry exactly matches
        or is more specific than one" [in a flow_mod command]
        (likely to be self in this case).
        '''
        if strict:
            return self == othermatch

        attrs = set(self.__slots__)
        attrs.discard('_wildcards')
        attrs.discard('_nw_src_wildcard')
        attrs.discard('_nw_dst_wildcard')
        matchtest = []
        for a in attrs:
            curr = getattr(self, a)
            other = getattr(othermatch, a)

            if a == '_nw_src' or a == '_nw_dst':
                # FIXME: clean this up
                wattr = "{}_wildcard".format(a)
                otherbits = 32 - getattr(othermatch, wattr)
                othernet = ip_network("{}/{}".format(getattr(othermatch, a), otherbits), strict=False)
                iswildcarded = curr in othernet
            else:
                wc = _wildcard_attr_map[a].name
                iswildcarded = wc in othermatch.wildcards

            matchtest.append(iswildcarded or curr == other)
        return all(matchtest)
Return True if this match object matches another
        match object (e.g., a flow table entry).

        NB: from OF 1.0 spec:
        A match occurs "when a flow entry exactly matches
        or is more specific than one" [in a flow_mod command]
        (likely to be self in this case).