1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __LINUX_PKT_CLS_H 2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __LINUX_PKT_CLS_H 3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h> 5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/pkt_sched.h> 6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* I think i could have done better macros ; for now this is stolen from 8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * some arch/mips code - jhs 9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng*/ 10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_MAKE32(x) ((x)) 11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_MAKEMASK1(n) (_TC_MAKE32(1) << _TC_MAKE32(n)) 13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_MAKEMASK(v,n) (_TC_MAKE32((_TC_MAKE32(1)<<(v))-1) << _TC_MAKE32(n)) 14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_MAKEVALUE(v,n) (_TC_MAKE32(v) << _TC_MAKE32(n)) 15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_GETVALUE(v,n,m) ((_TC_MAKE32(v) & _TC_MAKE32(m)) >> _TC_MAKE32(n)) 16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* verdict bit breakdown 18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 0: when set -> this packet has been munged already 20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 1: when set -> It is ok to munge this packet 22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 2,3,4,5: Reclassify counter - sort of reverse TTL - if exceeded 24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengassume loop 25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 6,7: Where this packet was last seen 27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng0: Above the transmit example at the socket level 28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng1: on the Ingress 29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng2: on the Egress 30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 8: when set --> Request not to classify on ingress. 32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbits 9,10,11: redirect counter - redirect TTL. Loop avoidance 34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * */ 37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_MUNGED _TC_MAKEMASK1(0) 39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_MUNGED(v) ( TC_MUNGED | (v & ~TC_MUNGED)) 40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CLR_TC_MUNGED(v) ( v & ~TC_MUNGED) 41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_OK2MUNGE _TC_MAKEMASK1(1) 43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_OK2MUNGE(v) ( TC_OK2MUNGE | (v & ~TC_OK2MUNGE)) 44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CLR_TC_OK2MUNGE(v) ( v & ~TC_OK2MUNGE) 45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define S_TC_VERD _TC_MAKE32(2) 47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define M_TC_VERD _TC_MAKEMASK(4,S_TC_VERD) 48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define G_TC_VERD(x) _TC_GETVALUE(x,S_TC_VERD,M_TC_VERD) 49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define V_TC_VERD(x) _TC_MAKEVALUE(x,S_TC_VERD) 50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_VERD(v,n) ((V_TC_VERD(n)) | (v & ~M_TC_VERD)) 51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define S_TC_FROM _TC_MAKE32(6) 53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define M_TC_FROM _TC_MAKEMASK(2,S_TC_FROM) 54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define G_TC_FROM(x) _TC_GETVALUE(x,S_TC_FROM,M_TC_FROM) 55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define V_TC_FROM(x) _TC_MAKEVALUE(x,S_TC_FROM) 56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_FROM(v,n) ((V_TC_FROM(n)) | (v & ~M_TC_FROM)) 57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define AT_STACK 0x0 58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define AT_INGRESS 0x1 59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define AT_EGRESS 0x2 60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_NCLS _TC_MAKEMASK1(8) 62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_NCLS(v) ( TC_NCLS | (v & ~TC_NCLS)) 63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CLR_TC_NCLS(v) ( v & ~TC_NCLS) 64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define S_TC_RTTL _TC_MAKE32(9) 66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define M_TC_RTTL _TC_MAKEMASK(3,S_TC_RTTL) 67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define G_TC_RTTL(x) _TC_GETVALUE(x,S_TC_RTTL,M_TC_RTTL) 68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define V_TC_RTTL(x) _TC_MAKEVALUE(x,S_TC_RTTL) 69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_RTTL(v,n) ((V_TC_RTTL(n)) | (v & ~M_TC_RTTL)) 70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define S_TC_AT _TC_MAKE32(12) 72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define M_TC_AT _TC_MAKEMASK(2,S_TC_AT) 73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define G_TC_AT(x) _TC_GETVALUE(x,S_TC_AT,M_TC_AT) 74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define V_TC_AT(x) _TC_MAKEVALUE(x,S_TC_AT) 75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_AT(v,n) ((V_TC_AT(n)) | (v & ~M_TC_AT)) 76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Action attributes */ 78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ACT_UNSPEC, 80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ACT_KIND, 81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ACT_OPTIONS, 82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ACT_INDEX, 83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ACT_STATS, 84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_ACT_MAX 85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_MAX __TCA_ACT_MAX 88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_OLD_COMPAT (TCA_ACT_MAX+1) 89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_MAX_PRIO 32 90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_BIND 1 91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_NOBIND 0 92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_UNBIND 1 93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_NOUNBIND 0 94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_REPLACE 1 95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_NOREPLACE 0 96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MAX_REC_LOOP 4 97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MAX_RED_LOOP 4 98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_UNSPEC (-1) 100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_OK 0 101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_RECLASSIFY 1 102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_SHOT 2 103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_PIPE 3 104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_STOLEN 4 105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_QUEUED 5 106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_REPEAT 6 107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_JUMP 0x10000000 108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Action type identifiers*/ 110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ID_UNSPEC=0, 112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ID_POLICE=1, 113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* other actions go here */ 114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_ID_MAX=255 115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ID_MAX __TCA_ID_MAX 118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_police { 120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 index; 121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int action; 122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_UNSPEC TC_ACT_UNSPEC 123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_OK TC_ACT_OK 124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_RECLASSIFY TC_ACT_RECLASSIFY 125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_SHOT TC_ACT_SHOT 126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_PIPE TC_ACT_PIPE 127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 limit; 129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 burst; 130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 mtu; 131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct tc_ratespec rate; 132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct tc_ratespec peakrate; 133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int refcnt; 134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int bindcnt; 135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 capab; 136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcf_t { 139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 install; 140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 lastuse; 141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 expires; 142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_cnt { 145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int refcnt; 146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int bindcnt; 147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define tc_gen \ 150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 index; \ 151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 capab; \ 152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int action; \ 153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int refcnt; \ 154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int bindcnt 155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_POLICE_UNSPEC, 158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_POLICE_TBF, 159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_POLICE_RATE, 160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_POLICE_PEAKRATE, 161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_POLICE_AVRATE, 162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_POLICE_RESULT, 163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_POLICE_MAX 164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_POLICE_RESULT TCA_POLICE_RESULT 165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1) 168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* U32 filters */ 170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_HTID(h) ((h)&0xFFF00000) 172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20) 173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_HASH(h) (((h)>>12)&0xFF) 174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_NODE(h) ((h)&0xFFF) 175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_KEY(h) ((h)&0xFFFFF) 176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_UNSPEC 0 177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_ROOT (0xFFF00000) 178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_UNSPEC, 181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_CLASSID, 182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_HASH, 183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_LINK, 184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_DIVISOR, 185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_SEL, 186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_POLICE, 187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_ACT, 188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_INDEV, 189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_PCNT, 190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_U32_MARK, 191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_U32_MAX 192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_U32_MAX (__TCA_U32_MAX - 1) 195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_key { 197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __be32 mask; 198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __be32 val; 199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int off; 200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int offmask; 201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_sel { 204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char flags; 205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char offshift; 206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char nkeys; 207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __be16 offmask; 209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 off; 210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng short offoff; 211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng short hoff; 213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __be32 hmask; 214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct tc_u32_key keys[0]; 215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_mark { 218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 val; 219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 mask; 220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 success; 221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_pcnt { 224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 rcnt; 225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 rhit; 226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 kcnts[0]; 227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Flags */ 230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_TERMINAL 1 232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_OFFSET 2 233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_VAROFFSET 4 234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_EAT 8 235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_MAXDEPTH 8 237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RSVP filter */ 240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_RSVP_UNSPEC, 243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_RSVP_CLASSID, 244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_RSVP_DST, 245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_RSVP_SRC, 246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_RSVP_PINFO, 247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_RSVP_POLICE, 248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_RSVP_ACT, 249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_RSVP_MAX 250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 ) 253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_rsvp_gpi { 255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 key; 256224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 mask; 257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int offset; 258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_rsvp_pinfo { 261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct tc_rsvp_gpi dpi; 262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct tc_rsvp_gpi spi; 263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 protocol; 264224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 tunnelid; 265224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 tunnelhdr; 266224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 pad; 267224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 268224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* ROUTE filter */ 270224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 272224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ROUTE4_UNSPEC, 273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ROUTE4_CLASSID, 274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ROUTE4_TO, 275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ROUTE4_FROM, 276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ROUTE4_IIF, 277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ROUTE4_POLICE, 278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_ROUTE4_ACT, 279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_ROUTE4_MAX 280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1) 283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 284224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 285224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* FW filter */ 286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FW_UNSPEC, 289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FW_CLASSID, 290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FW_POLICE, 291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FW_INDEV, /* used by CONFIG_NET_CLS_IND */ 292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */ 293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FW_MASK, 294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_FW_MAX 295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_FW_MAX (__TCA_FW_MAX - 1) 298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* TC index filter */ 300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_TCINDEX_UNSPEC, 303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_TCINDEX_HASH, 304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_TCINDEX_MASK, 305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_TCINDEX_SHIFT, 306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_TCINDEX_FALL_THROUGH, 307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_TCINDEX_CLASSID, 308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_TCINDEX_POLICE, 309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_TCINDEX_ACT, 310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_TCINDEX_MAX 311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_TCINDEX_MAX (__TCA_TCINDEX_MAX - 1) 314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Flow filter */ 316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_SRC, 319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_DST, 320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_PROTO, 321224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_PROTO_SRC, 322224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_PROTO_DST, 323224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_IIF, 324224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_PRIORITY, 325224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_MARK, 326224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_NFCT, 327224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_NFCT_SRC, 328224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_NFCT_DST, 329224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_NFCT_PROTO_SRC, 330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_NFCT_PROTO_DST, 331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_RTCLASSID, 332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_SKUID, 333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_SKGID, 334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_VLAN_TAG, 335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_KEY_RXHASH, 336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __FLOW_KEY_MAX, 337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1) 340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_MODE_MAP, 343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng FLOW_MODE_HASH, 344224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 345224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 346224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 347224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_UNSPEC, 348224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_KEYS, 349224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_MODE, 350224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_BASECLASS, 351224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_RSHIFT, 352224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_ADDEND, 353224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_MASK, 354224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_XOR, 355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_DIVISOR, 356224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_ACT, 357224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_POLICE, 358224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_EMATCHES, 359224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FLOW_PERTURB, 360224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_FLOW_MAX 361224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 362224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 363224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_FLOW_MAX (__TCA_FLOW_MAX - 1) 364224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 365224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Basic filter */ 366224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 367224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 368224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_BASIC_UNSPEC, 369224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_BASIC_CLASSID, 370224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_BASIC_EMATCHES, 371224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_BASIC_ACT, 372224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_BASIC_POLICE, 373224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_BASIC_MAX 374224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 375224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 376224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1) 377224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 378224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 379224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Cgroup classifier */ 380224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 381224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 382224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_CGROUP_UNSPEC, 383224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_CGROUP_ACT, 384224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_CGROUP_POLICE, 385224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_CGROUP_EMATCHES, 386224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_CGROUP_MAX, 387224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 388224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 389224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1) 390224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 391e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris/* BPF classifier */ 392e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris 393e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferrisenum { 394e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris TCA_BPF_UNSPEC, 395e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris TCA_BPF_ACT, 396e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris TCA_BPF_POLICE, 397e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris TCA_BPF_CLASSID, 398e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris TCA_BPF_OPS_LEN, 399e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris TCA_BPF_OPS, 400e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris __TCA_BPF_MAX, 401e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris}; 402e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris 403e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define TCA_BPF_MAX (__TCA_BPF_MAX - 1) 404e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris 405224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Extended Matches */ 406224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 407224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcf_ematch_tree_hdr { 408224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 nmatches; 409224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 progid; 410224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 411224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 412224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 413224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_EMATCH_TREE_UNSPEC, 414224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_EMATCH_TREE_HDR, 415224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_EMATCH_TREE_LIST, 416224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_EMATCH_TREE_MAX 417224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 418224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1) 419224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 420224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcf_ematch_hdr { 421224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 matchid; 422224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 kind; 423224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 flags; 424224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 pad; /* currently unused */ 425224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 426224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 427224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 0 1 428224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 429224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * +-----------------------+-+-+---+ 430224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * | Unused |S|I| R | 431224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * +-----------------------+-+-+---+ 432224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 433224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * R(2) ::= relation to next ematch 434224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * where: 0 0 END (last ematch) 435224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 0 1 AND 436224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 1 0 OR 437224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 1 1 Unused (invalid) 438224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * I(1) ::= invert result 439224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * S(1) ::= simple payload 440224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 441224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_END 0 442224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_AND (1<<0) 443224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_OR (1<<1) 444224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_INVERT (1<<2) 445224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_SIMPLE (1<<3) 446224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 447224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_MASK 3 448224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK) 449224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 450224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 451224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCF_LAYER_LINK, 452224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCF_LAYER_NETWORK, 453224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCF_LAYER_TRANSPORT, 454224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCF_LAYER_MAX 455224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 456224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1) 457224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 458224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Ematch type assignments 459224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 1..32767 Reserved for ematches inside kernel tree 460224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 32768..65535 Free to use, not reliable 461224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 462224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_CONTAINER 0 463224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_CMP 1 464224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_NBYTE 2 465224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_U32 3 466224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_META 4 467224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_TEXT 5 468224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_VLAN 6 469224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_CANID 7 470224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_IPSET 8 471224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_MAX 8 472224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 473224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 474224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCF_EM_PROG_TC 475224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 476224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 477224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 478224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCF_EM_OPND_EQ, 479224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCF_EM_OPND_GT, 480224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCF_EM_OPND_LT 481224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 482224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 483224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 484