- if ((*pskb)->nfmark != info->mark) {
- (*pskb)->nfmark = info->mark;
- (*pskb)->nfcache |= NFC_ALTERED;
- }
- return info->target;
+ if (action == MARK_SET_VALUE)
+ (*pskb)->mark = info->mark;
+ else if (action == MARK_OR_VALUE)
+ (*pskb)->mark |= info->mark;
+ else if (action == MARK_AND_VALUE)
+ (*pskb)->mark &= info->mark;
+ else
+ (*pskb)->mark ^= info->mark;
+
+ return info->target | ~EBT_VERDICT_BITS;