1--- original/linux/net/ipv4/netfilter/ipt_MARK.c Mon Oct 1 03:26:08 2001 2+++ linux/net/ipv4/netfilter/ipt_MARK.c Wed Feb 20 22:45:12 2002 3@@ -17,10 +17,22 @@ 4 { 5 const struct ipt_mark_target_info *markinfo = targinfo; 6 7- if((*pskb)->nfmark != markinfo->mark) { 8+ switch (markinfo->mode) { 9+ case IPT_MARK_SET: 10 (*pskb)->nfmark = markinfo->mark; 11- (*pskb)->nfcache |= NFC_ALTERED; 12+ break; 13+ 14+ case IPT_MARK_AND: 15+ (*pskb)->nfmark = (*pskb)->nfmark & markinfo->mark; 16+ break; 17+ 18+ case IPT_MARK_OR: 19+ (*pskb)->nfmark = (*pskb)->nfmark | markinfo->mark; 20+ break; 21+ default: 22+ break; 23 } 24+ (*pskb)->nfcache |= NFC_ALTERED; 25 return IPT_CONTINUE; 26 } 27 28--- original/linux/include/linux/netfilter_ipv4/ipt_MARK.h Sat Mar 18 02:56:20 2000 29+++ linux/include/linux/netfilter_ipv4/ipt_MARK.h Wed Feb 20 22:24:16 2002 30@@ -1,8 +1,15 @@ 31 #ifndef _IPT_MARK_H_target 32 #define _IPT_MARK_H_target 33 34+enum { 35+ IPT_MARK_SET, 36+ IPT_MARK_AND, 37+ IPT_MARK_OR 38+}; 39+ 40 struct ipt_mark_target_info { 41 unsigned long mark; 42+ u_int8_t mode; 43 }; 44 45 #endif /*_IPT_MARK_H_target*/ 46