diff options
author | Jiri Pirko <jpirko@redhat.com> | 2012-03-31 11:01:20 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-04-03 18:36:20 -0400 |
commit | ffe06c17afbbbd4d73cdc339419be232847d667a (patch) | |
tree | bfe1e55c86d317d9a4412e2d7da07f837265b066 | |
parent | 302d663740cfaf2c364df6bb61cd339014ed714c (diff) | |
download | op-kernel-dev-ffe06c17afbbbd4d73cdc339419be232847d667a.zip op-kernel-dev-ffe06c17afbbbd4d73cdc339419be232847d667a.tar.gz |
filter: add XOR operation
Add XOR instruction fo BPF machine. Needed for computing packet hashes.
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/linux/filter.h | 4 | ||||
-rw-r--r-- | net/core/filter.c | 4 |
2 files changed, 7 insertions, 1 deletions
diff --git a/include/linux/filter.h b/include/linux/filter.h index 92dd993..7209099 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -126,7 +126,8 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ #define SKF_AD_HATYPE 28 #define SKF_AD_RXHASH 32 #define SKF_AD_CPU 36 -#define SKF_AD_MAX 40 +#define SKF_AD_ALU_XOR_X 40 +#define SKF_AD_MAX 44 #define SKF_NET_OFF (-0x100000) #define SKF_LL_OFF (-0x200000) @@ -231,6 +232,7 @@ enum { BPF_S_ANC_HATYPE, BPF_S_ANC_RXHASH, BPF_S_ANC_CPU, + BPF_S_ANC_ALU_XOR_X, }; #endif /* __KERNEL__ */ diff --git a/net/core/filter.c b/net/core/filter.c index cfbea88..5099c4b 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -315,6 +315,9 @@ load_b: case BPF_S_ANC_CPU: A = raw_smp_processor_id(); continue; + case BPF_S_ANC_ALU_XOR_X: + A ^= X; + continue; case BPF_S_ANC_NLATTR: { struct nlattr *nla; @@ -559,6 +562,7 @@ int sk_chk_filter(struct sock_filter *filter, unsigned int flen) ANCILLARY(HATYPE); ANCILLARY(RXHASH); ANCILLARY(CPU); + ANCILLARY(ALU_XOR_X); } } ftest->code = code; |