pkt_cls.h revision 6f0ba88be018dee5feb08e7b125b10b633bb000c
1#ifndef __LINUX_PKT_CLS_H 2#define __LINUX_PKT_CLS_H 3 4/* I think i could have done better macros ; for now this is stolen from 5 * some arch/mips code - jhs 6*/ 7#define _TC_MAKE32(x) ((x)) 8 9#define _TC_MAKEMASK1(n) (_TC_MAKE32(1) << _TC_MAKE32(n)) 10#define _TC_MAKEMASK(v,n) (_TC_MAKE32((_TC_MAKE32(1)<<(v))-1) << _TC_MAKE32(n)) 11#define _TC_MAKEVALUE(v,n) (_TC_MAKE32(v) << _TC_MAKE32(n)) 12#define _TC_GETVALUE(v,n,m) ((_TC_MAKE32(v) & _TC_MAKE32(m)) >> _TC_MAKE32(n)) 13 14/* verdict bit breakdown 15 * 16bit 0: when set -> this packet has been munged already 17 18bit 1: when set -> It is ok to munge this packet 19 20bit 2,3,4,5: Reclassify counter - sort of reverse TTL - if exceeded 21assume loop 22 23bit 6,7: Where this packet was last seen 240: Above the transmit example at the socket level 251: on the Ingress 262: on the Egress 27 28bit 8: when set --> Request not to classify on ingress. 29 30bits 9,10,11: redirect counter - redirect TTL. Loop avoidance 31 32 * 33 * */ 34 35#define TC_MUNGED _TC_MAKEMASK1(0) 36#define SET_TC_MUNGED(v) ( TC_MUNGED | (v & ~TC_MUNGED)) 37#define CLR_TC_MUNGED(v) ( v & ~TC_MUNGED) 38 39#define TC_OK2MUNGE _TC_MAKEMASK1(1) 40#define SET_TC_OK2MUNGE(v) ( TC_OK2MUNGE | (v & ~TC_OK2MUNGE)) 41#define CLR_TC_OK2MUNGE(v) ( v & ~TC_OK2MUNGE) 42 43#define S_TC_VERD _TC_MAKE32(2) 44#define M_TC_VERD _TC_MAKEMASK(4,S_TC_VERD) 45#define G_TC_VERD(x) _TC_GETVALUE(x,S_TC_VERD,M_TC_VERD) 46#define V_TC_VERD(x) _TC_MAKEVALUE(x,S_TC_VERD) 47#define SET_TC_VERD(v,n) ((V_TC_VERD(n)) | (v & ~M_TC_VERD)) 48 49#define S_TC_FROM _TC_MAKE32(6) 50#define M_TC_FROM _TC_MAKEMASK(2,S_TC_FROM) 51#define G_TC_FROM(x) _TC_GETVALUE(x,S_TC_FROM,M_TC_FROM) 52#define V_TC_FROM(x) _TC_MAKEVALUE(x,S_TC_FROM) 53#define SET_TC_FROM(v,n) ((V_TC_FROM(n)) | (v & ~M_TC_FROM)) 54#define AT_STACK 0x0 55#define AT_INGRESS 0x1 56#define AT_EGRESS 0x2 57 58#define TC_NCLS _TC_MAKEMASK1(8) 59#define SET_TC_NCLS(v) ( TC_NCLS | (v & ~TC_NCLS)) 60#define CLR_TC_NCLS(v) ( v & ~TC_NCLS) 61 62#define S_TC_RTTL _TC_MAKE32(9) 63#define M_TC_RTTL _TC_MAKEMASK(3,S_TC_RTTL) 64#define G_TC_RTTL(x) _TC_GETVALUE(x,S_TC_RTTL,M_TC_RTTL) 65#define V_TC_RTTL(x) _TC_MAKEVALUE(x,S_TC_RTTL) 66#define SET_TC_RTTL(v,n) ((V_TC_RTTL(n)) | (v & ~M_TC_RTTL)) 67 68#define S_TC_AT _TC_MAKE32(12) 69#define M_TC_AT _TC_MAKEMASK(2,S_TC_AT) 70#define G_TC_AT(x) _TC_GETVALUE(x,S_TC_AT,M_TC_AT) 71#define V_TC_AT(x) _TC_MAKEVALUE(x,S_TC_AT) 72#define SET_TC_AT(v,n) ((V_TC_AT(n)) | (v & ~M_TC_AT)) 73 74/* Action attributes */ 75enum 76{ 77 TCA_ACT_UNSPEC, 78 TCA_ACT_KIND, 79 TCA_ACT_OPTIONS, 80 TCA_ACT_INDEX, 81 __TCA_ACT_MAX 82}; 83 84#define TCA_ACT_MAX __TCA_ACT_MAX 85#define TCA_OLD_COMPAT (TCA_ACT_MAX+1) 86#define TCA_ACT_MAX_PRIO 32 87#define TCA_ACT_BIND 1 88#define TCA_ACT_NOBIND 0 89#define TCA_ACT_UNBIND 1 90#define TCA_ACT_NOUNBIND 0 91#define TCA_ACT_REPLACE 1 92#define TCA_ACT_NOREPLACE 0 93#define MAX_REC_LOOP 4 94#define MAX_RED_LOOP 4 95 96#define TC_ACT_UNSPEC (-1) 97#define TC_ACT_OK 0 98#define TC_ACT_RECLASSIFY 1 99#define TC_ACT_SHOT 2 100#define TC_ACT_PIPE 3 101#define TC_ACT_STOLEN 4 102#define TC_ACT_QUEUED 5 103#define TC_ACT_REPEAT 6 104#define TC_ACT_JUMP 0x10000000 105 106/* Action type identifiers*/ 107enum 108{ 109 TCA_ID_UNSPEC=0, 110 TCA_ID_POLICE=1, 111 /* other actions go here */ 112 __TCA_ID_MAX=255 113}; 114 115#define TCA_ID_MAX __TCA_ID_MAX 116 117struct tc_police 118{ 119 __u32 index; 120 int action; 121#define TC_POLICE_UNSPEC TC_ACT_UNSPEC 122#define TC_POLICE_OK TC_ACT_OK 123#define TC_POLICE_RECLASSIFY TC_ACT_RECLASSIFY 124#define TC_POLICE_SHOT TC_ACT_SHOT 125#define TC_POLICE_PIPE TC_ACT_PIPE 126 127 __u32 limit; 128 __u32 burst; 129 __u32 mtu; 130 struct tc_ratespec rate; 131 struct tc_ratespec peakrate; 132 int refcnt; 133 int bindcnt; 134 __u32 capab; 135}; 136 137struct tcf_t 138{ 139 __u32 install; 140 __u32 lastuse; 141 __u32 expires; 142}; 143 144struct tc_cnt 145{ 146 int refcnt; 147 int bindcnt; 148}; 149 150#define tc_gen \ 151 __u32 index; \ 152 __u32 capab; \ 153 int action; \ 154 int refcnt; \ 155 int bindcnt 156 157enum 158{ 159 TCA_POLICE_UNSPEC, 160 TCA_POLICE_TBF, 161 TCA_POLICE_RATE, 162 TCA_POLICE_PEAKRATE, 163 TCA_POLICE_AVRATE, 164 TCA_POLICE_RESULT, 165 __TCA_POLICE_MAX 166#define TCA_POLICE_RESULT TCA_POLICE_RESULT 167}; 168 169#define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1) 170 171/* U32 filters */ 172 173#define TC_U32_HTID(h) ((h)&0xFFF00000) 174#define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20) 175#define TC_U32_HASH(h) (((h)>>12)&0xFF) 176#define TC_U32_NODE(h) ((h)&0xFFF) 177#define TC_U32_KEY(h) ((h)&0xFFFFF) 178#define TC_U32_UNSPEC 0 179#define TC_U32_ROOT (0xFFF00000) 180 181enum 182{ 183 TCA_U32_UNSPEC, 184 TCA_U32_CLASSID, 185 TCA_U32_HASH, 186 TCA_U32_LINK, 187 TCA_U32_DIVISOR, 188 TCA_U32_SEL, 189 TCA_U32_POLICE, 190 TCA_U32_ACT, 191 TCA_U32_INDEV, 192 TCA_U32_PCNT, 193 TCA_U32_MARK, 194 __TCA_U32_MAX 195}; 196 197#define TCA_U32_MAX (__TCA_U32_MAX - 1) 198 199struct tc_u32_key 200{ 201 __u32 mask; 202 __u32 val; 203 int off; 204 int offmask; 205}; 206 207struct tc_u32_sel 208{ 209 unsigned char flags; 210 unsigned char offshift; 211 unsigned char nkeys; 212 213 __u16 offmask; 214 __u16 off; 215 short offoff; 216 217 short hoff; 218 __u32 hmask; 219 struct tc_u32_key keys[0]; 220}; 221 222struct tc_u32_pcnt 223{ 224 __u64 rcnt; 225 __u64 rhit; 226 __u64 kcnts[0]; 227}; 228 229struct tc_u32_mark 230{ 231 __u32 val; 232 __u32 mask; 233 __u32 success; 234}; 235 236/* Flags */ 237 238#define TC_U32_TERMINAL 1 239#define TC_U32_OFFSET 2 240#define TC_U32_VAROFFSET 4 241#define TC_U32_EAT 8 242 243#define TC_U32_MAXDEPTH 8 244 245 246/* RSVP filter */ 247 248enum 249{ 250 TCA_RSVP_UNSPEC, 251 TCA_RSVP_CLASSID, 252 TCA_RSVP_DST, 253 TCA_RSVP_SRC, 254 TCA_RSVP_PINFO, 255 TCA_RSVP_POLICE, 256 __TCA_RSVP_MAX 257}; 258 259#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 ) 260 261struct tc_rsvp_gpi 262{ 263 __u32 key; 264 __u32 mask; 265 int offset; 266}; 267 268struct tc_rsvp_pinfo 269{ 270 struct tc_rsvp_gpi dpi; 271 struct tc_rsvp_gpi spi; 272 __u8 protocol; 273 __u8 tunnelid; 274 __u8 tunnelhdr; 275}; 276 277/* ROUTE filter */ 278 279enum 280{ 281 TCA_ROUTE4_UNSPEC, 282 TCA_ROUTE4_CLASSID, 283 TCA_ROUTE4_TO, 284 TCA_ROUTE4_FROM, 285 TCA_ROUTE4_IIF, 286 TCA_ROUTE4_POLICE, 287 __TCA_ROUTE4_MAX 288}; 289 290#define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1) 291 292 293/* FW filter */ 294 295enum 296{ 297 TCA_FW_UNSPEC, 298 TCA_FW_CLASSID, 299 TCA_FW_POLICE, 300 TCA_FW_INDEV, /* used by CONFIG_NET_CLS_IND */ 301 TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */ 302 __TCA_FW_MAX 303}; 304 305#define TCA_FW_MAX (__TCA_FW_MAX - 1) 306 307/* TC index filter */ 308 309enum 310{ 311 TCA_TCINDEX_UNSPEC, 312 TCA_TCINDEX_HASH, 313 TCA_TCINDEX_MASK, 314 TCA_TCINDEX_SHIFT, 315 TCA_TCINDEX_FALL_THROUGH, 316 TCA_TCINDEX_CLASSID, 317 TCA_TCINDEX_POLICE, 318 __TCA_TCINDEX_MAX 319}; 320 321#define TCA_TCINDEX_MAX (__TCA_TCINDEX_MAX - 1) 322 323#endif 324