FILTER_TRACE("%u %s %c remote tag %u not found -> 0 (inbound side is strict)",rn,_rtn(rt),(((rules[rn].t&0x80)!=0)?'!':'='),(unsignedint)rules[rn].v.tag.id);
}else{
// Outbound side is not strict since if we have to match both tags and
// we are sending a first packet to a recipient, we probably do not know
// about their tags yet. They will filter on inbound and we will filter
// once we get their tag. If we are a tee/redirect target we are also
// not strict since we likely do not have these tags.
thisRuleMatches=1;
FILTER_TRACE("%u %s %c remote tag %u not found -> 1 (outbound side and TEE/REDIRECT targets are not strict)",rn,_rtn(rt),(((rules[rn].t&0x80)!=0)?'!':'='),(unsignedint)rules[rn].v.tag.id);
FILTER_TRACE("%u %s %c TAG %u %.8x == %.8x -> %u",rn,_rtn(rt),(((rules[rn].t&0x80)!=0)?'!':'='),(unsignedint)rules[rn].v.tag.id,remoteTag->value(),(unsignedint)rules[rn].v.tag.value,(unsignedint)thisRuleMatches);
}else{
if(rt==ZT_NETWORK_RULE_MATCH_TAG_RECEIVER){
// If we are checking the receiver and this is an outbound packet, we
// can't be strict since we may not yet know the receiver's tag.
thisRuleMatches=1;
FILTER_TRACE("%u %s %c (inbound) remote tag %u not found -> 1 (outbound receiver match is not strict)",rn,_rtn(rt),(((rules[rn].t&0x80)!=0)?'!':'='),(unsignedint)rules[rn].v.tag.id);
}else{
thisRuleMatches=0;
FILTER_TRACE("%u %s %c (inbound) remote tag %u not found -> 0",rn,_rtn(rt),(((rules[rn].t&0x80)!=0)?'!':'='),(unsignedint)rules[rn].v.tag.id);
}
}
}else{// sender and outbound or receiver and inbound