diff --git a/[refs] b/[refs] index 194df85658a1..cd64a5dbd624 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0f6ae8f14e7a6a068e9a98a0d3484ffa6bf2c6bb +refs/heads/master: f3335031b9452baebfe49b8b5e55d3fe0c4677d1 diff --git a/trunk/include/linux/filter.h b/trunk/include/linux/filter.h index 24d251f3bab0..c9f0005c35e2 100644 --- a/trunk/include/linux/filter.h +++ b/trunk/include/linux/filter.h @@ -123,6 +123,8 @@ enum { BPF_S_ANC_CPU, BPF_S_ANC_ALU_XOR_X, BPF_S_ANC_SECCOMP_LD_W, + BPF_S_ANC_VLAN_TAG, + BPF_S_ANC_VLAN_TAG_PRESENT, }; #endif /* __LINUX_FILTER_H__ */ diff --git a/trunk/include/uapi/linux/filter.h b/trunk/include/uapi/linux/filter.h index 3d7922433aba..9cfde6941099 100644 --- a/trunk/include/uapi/linux/filter.h +++ b/trunk/include/uapi/linux/filter.h @@ -127,7 +127,9 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ #define SKF_AD_RXHASH 32 #define SKF_AD_CPU 36 #define SKF_AD_ALU_XOR_X 40 -#define SKF_AD_MAX 44 +#define SKF_AD_VLAN_TAG 44 +#define SKF_AD_VLAN_TAG_PRESENT 48 +#define SKF_AD_MAX 52 #define SKF_NET_OFF (-0x100000) #define SKF_LL_OFF (-0x200000) diff --git a/trunk/net/core/filter.c b/trunk/net/core/filter.c index 3d92ebb7fbcf..5a114d41bf11 100644 --- a/trunk/net/core/filter.c +++ b/trunk/net/core/filter.c @@ -39,6 +39,7 @@ #include #include #include +#include /* No hurry in this branch * @@ -341,6 +342,12 @@ unsigned int sk_run_filter(const struct sk_buff *skb, case BPF_S_ANC_CPU: A = raw_smp_processor_id(); continue; + case BPF_S_ANC_VLAN_TAG: + A = vlan_tx_tag_get(skb); + continue; + case BPF_S_ANC_VLAN_TAG_PRESENT: + A = !!vlan_tx_tag_present(skb); + continue; case BPF_S_ANC_NLATTR: { struct nlattr *nla; @@ -600,6 +607,8 @@ int sk_chk_filter(struct sock_filter *filter, unsigned int flen) ANCILLARY(RXHASH); ANCILLARY(CPU); ANCILLARY(ALU_XOR_X); + ANCILLARY(VLAN_TAG); + ANCILLARY(VLAN_TAG_PRESENT); } } ftest->code = code;