Lines 38-46
Link Here
|
38 |
|
38 |
|
39 |
#define usage() return(-1) |
39 |
#define usage() return(-1) |
40 |
|
40 |
|
41 |
int get_u32_handle(__u32 *handle, char *str) |
41 |
int get_u32_handle(uint32_t *handle, char *str) |
42 |
{ |
42 |
{ |
43 |
__u32 htid=0, hash=0, nodeid=0; |
43 |
uint32_t htid=0, hash=0, nodeid=0; |
44 |
char *tmp = strchr(str, ':'); |
44 |
char *tmp = strchr(str, ':'); |
45 |
|
45 |
|
46 |
if (tmp == NULL) { |
46 |
if (tmp == NULL) { |
Lines 73-84
Link Here
|
73 |
return 0; |
73 |
return 0; |
74 |
} |
74 |
} |
75 |
|
75 |
|
76 |
char * sprint_u32_handle(__u32 handle, char *buf) |
76 |
char * sprint_u32_handle(uint32_t handle, char *buf) |
77 |
{ |
77 |
{ |
78 |
int bsize = SPRINT_BSIZE-1; |
78 |
int bsize = SPRINT_BSIZE-1; |
79 |
__u32 htid = TC_U32_HTID(handle); |
79 |
uint32_t htid = TC_U32_HTID(handle); |
80 |
__u32 hash = TC_U32_HASH(handle); |
80 |
uint32_t hash = TC_U32_HASH(handle); |
81 |
__u32 nodeid = TC_U32_NODE(handle); |
81 |
uint32_t nodeid = TC_U32_NODE(handle); |
82 |
char *b = buf; |
82 |
char *b = buf; |
83 |
|
83 |
|
84 |
if (handle == 0) { |
84 |
if (handle == 0) { |
Lines 107-113
Link Here
|
107 |
return buf; |
107 |
return buf; |
108 |
} |
108 |
} |
109 |
|
109 |
|
110 |
static int pack_key(struct tc_u32_sel *sel, __u32 key, __u32 mask, int off, int offmask) |
110 |
static int pack_key(struct tc_u32_sel *sel, uint32_t key, uint32_t mask, int off, int offmask) |
111 |
{ |
111 |
{ |
112 |
int i; |
112 |
int i; |
113 |
int hwm = sel->nkeys; |
113 |
int hwm = sel->nkeys; |
Lines 116-122
Link Here
|
116 |
|
116 |
|
117 |
for (i=0; i<hwm; i++) { |
117 |
for (i=0; i<hwm; i++) { |
118 |
if (sel->keys[i].off == off && sel->keys[i].offmask == offmask) { |
118 |
if (sel->keys[i].off == off && sel->keys[i].offmask == offmask) { |
119 |
__u32 intersect = mask&sel->keys[i].mask; |
119 |
uint32_t intersect = mask&sel->keys[i].mask; |
120 |
|
120 |
|
121 |
if ((key^sel->keys[i].val) & intersect) |
121 |
if ((key^sel->keys[i].val) & intersect) |
122 |
return -1; |
122 |
return -1; |
Lines 138-151
Link Here
|
138 |
return 0; |
138 |
return 0; |
139 |
} |
139 |
} |
140 |
|
140 |
|
141 |
static int pack_key32(struct tc_u32_sel *sel, __u32 key, __u32 mask, int off, int offmask) |
141 |
static int pack_key32(struct tc_u32_sel *sel, uint32_t key, uint32_t mask, int off, int offmask) |
142 |
{ |
142 |
{ |
143 |
key = htonl(key); |
143 |
key = htonl(key); |
144 |
mask = htonl(mask); |
144 |
mask = htonl(mask); |
145 |
return pack_key(sel, key, mask, off, offmask); |
145 |
return pack_key(sel, key, mask, off, offmask); |
146 |
} |
146 |
} |
147 |
|
147 |
|
148 |
static int pack_key16(struct tc_u32_sel *sel, __u32 key, __u32 mask, int off, int offmask) |
148 |
static int pack_key16(struct tc_u32_sel *sel, uint32_t key, uint32_t mask, int off, int offmask) |
149 |
{ |
149 |
{ |
150 |
if (key > 0xFFFF || mask > 0xFFFF) |
150 |
if (key > 0xFFFF || mask > 0xFFFF) |
151 |
return -1; |
151 |
return -1; |
Lines 161-167
Link Here
|
161 |
return pack_key(sel, key, mask, off, offmask); |
161 |
return pack_key(sel, key, mask, off, offmask); |
162 |
} |
162 |
} |
163 |
|
163 |
|
164 |
static int pack_key8(struct tc_u32_sel *sel, __u32 key, __u32 mask, int off, int offmask) |
164 |
static int pack_key8(struct tc_u32_sel *sel, uint32_t key, uint32_t mask, int off, int offmask) |
165 |
{ |
165 |
{ |
166 |
if (key > 0xFF || mask > 0xFF) |
166 |
if (key > 0xFF || mask > 0xFF) |
167 |
return -1; |
167 |
return -1; |
Lines 218-225
Link Here
|
218 |
int res = -1; |
218 |
int res = -1; |
219 |
int argc = *argc_p; |
219 |
int argc = *argc_p; |
220 |
char **argv = *argv_p; |
220 |
char **argv = *argv_p; |
221 |
__u32 key; |
221 |
uint32_t key; |
222 |
__u32 mask; |
222 |
uint32_t mask; |
223 |
|
223 |
|
224 |
if (argc < 2) |
224 |
if (argc < 2) |
225 |
return -1; |
225 |
return -1; |
Lines 249-256
Link Here
|
249 |
int res = -1; |
249 |
int res = -1; |
250 |
int argc = *argc_p; |
250 |
int argc = *argc_p; |
251 |
char **argv = *argv_p; |
251 |
char **argv = *argv_p; |
252 |
__u32 key; |
252 |
uint32_t key; |
253 |
__u32 mask; |
253 |
uint32_t mask; |
254 |
|
254 |
|
255 |
if (argc < 2) |
255 |
if (argc < 2) |
256 |
return -1; |
256 |
return -1; |
Lines 279-286
Link Here
|
279 |
int res = -1; |
279 |
int res = -1; |
280 |
int argc = *argc_p; |
280 |
int argc = *argc_p; |
281 |
char **argv = *argv_p; |
281 |
char **argv = *argv_p; |
282 |
__u32 key; |
282 |
uint32_t key; |
283 |
__u32 mask; |
283 |
uint32_t mask; |
284 |
|
284 |
|
285 |
if (argc < 2) |
285 |
if (argc < 2) |
286 |
return -1; |
286 |
return -1; |
Lines 314-320
Link Here
|
314 |
int argc = *argc_p; |
314 |
int argc = *argc_p; |
315 |
char **argv = *argv_p; |
315 |
char **argv = *argv_p; |
316 |
inet_prefix addr; |
316 |
inet_prefix addr; |
317 |
__u32 mask; |
317 |
uint32_t mask; |
318 |
int offmask = 0; |
318 |
int offmask = 0; |
319 |
|
319 |
|
320 |
if (argc < 1) |
320 |
if (argc < 1) |
Lines 371-377
Link Here
|
371 |
if ((res = pack_key(sel, addr.data[i/32], 0xFFFFFFFF, off+4*(i/32), offmask)) < 0) |
371 |
if ((res = pack_key(sel, addr.data[i/32], 0xFFFFFFFF, off+4*(i/32), offmask)) < 0) |
372 |
return -1; |
372 |
return -1; |
373 |
} else if (i<plen) { |
373 |
} else if (i<plen) { |
374 |
__u32 mask = htonl(0xFFFFFFFF<<(32-(plen-i))); |
374 |
uint32_t mask = htonl(0xFFFFFFFF<<(32-(plen-i))); |
375 |
if ((res = pack_key(sel, addr.data[i/32], mask, off+4*(i/32), offmask)) < 0) |
375 |
if ((res = pack_key(sel, addr.data[i/32], mask, off+4*(i/32), offmask)) < 0) |
376 |
return -1; |
376 |
return -1; |
377 |
} |
377 |
} |
Lines 705-711
Link Here
|
705 |
|
705 |
|
706 |
while (argc > 0) { |
706 |
while (argc > 0) { |
707 |
if (matches(*argv, "mask") == 0) { |
707 |
if (matches(*argv, "mask") == 0) { |
708 |
__u32 mask; |
708 |
uint32_t mask; |
709 |
NEXT_ARG(); |
709 |
NEXT_ARG(); |
710 |
if (get_u32(&mask, *argv, 16)) |
710 |
if (get_u32(&mask, *argv, 16)) |
711 |
return -1; |
711 |
return -1; |
Lines 739-746
Link Here
|
739 |
struct rtattr *tail; |
739 |
struct rtattr *tail; |
740 |
int sel_ok = 0; |
740 |
int sel_ok = 0; |
741 |
int sample_ok = 0; |
741 |
int sample_ok = 0; |
742 |
__u32 htid = 0; |
742 |
uint32_t htid = 0; |
743 |
__u32 order = 0; |
743 |
uint32_t order = 0; |
744 |
|
744 |
|
745 |
memset(&sel, 0, sizeof(sel)); |
745 |
memset(&sel, 0, sizeof(sel)); |
746 |
|
746 |
|
Lines 831-837
Link Here
|
831 |
else |
831 |
else |
832 |
htid = (handle&0xFFFFF000); |
832 |
htid = (handle&0xFFFFF000); |
833 |
} else if (strcmp(*argv, "sample") == 0) { |
833 |
} else if (strcmp(*argv, "sample") == 0) { |
834 |
__u32 hash; |
834 |
uint32_t hash; |
835 |
struct { |
835 |
struct { |
836 |
struct tc_u32_sel sel; |
836 |
struct tc_u32_sel sel; |
837 |
struct tc_u32_key keys[4]; |
837 |
struct tc_u32_key keys[4]; |
Lines 885-891
Link Here
|
885 |
return 0; |
885 |
return 0; |
886 |
} |
886 |
} |
887 |
|
887 |
|
888 |
static int u32_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt, __u32 handle) |
888 |
static int u32_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt, uint32_t handle) |
889 |
{ |
889 |
{ |
890 |
struct rtattr *tb[TCA_U32_MAX+1]; |
890 |
struct rtattr *tb[TCA_U32_MAX+1]; |
891 |
struct tc_u32_sel *sel = NULL; |
891 |
struct tc_u32_sel *sel = NULL; |
Lines 913-921
Link Here
|
913 |
} |
913 |
} |
914 |
|
914 |
|
915 |
if (tb[TCA_U32_DIVISOR]) { |
915 |
if (tb[TCA_U32_DIVISOR]) { |
916 |
fprintf(f, "ht divisor %d ", *(__u32*)RTA_DATA(tb[TCA_U32_DIVISOR])); |
916 |
fprintf(f, "ht divisor %d ", *(uint32_t*)RTA_DATA(tb[TCA_U32_DIVISOR])); |
917 |
} else if (tb[TCA_U32_HASH]) { |
917 |
} else if (tb[TCA_U32_HASH]) { |
918 |
__u32 htid = *(__u32*)RTA_DATA(tb[TCA_U32_HASH]); |
918 |
uint32_t htid = *(uint32_t*)RTA_DATA(tb[TCA_U32_HASH]); |
919 |
fprintf(f, "key ht %x bkt %x ", TC_U32_USERHTID(htid), TC_U32_HASH(htid)); |
919 |
fprintf(f, "key ht %x bkt %x ", TC_U32_USERHTID(htid), TC_U32_HASH(htid)); |
920 |
} else { |
920 |
} else { |
921 |
fprintf(f, "??? "); |
921 |
fprintf(f, "??? "); |
Lines 924-936
Link Here
|
924 |
SPRINT_BUF(b1); |
924 |
SPRINT_BUF(b1); |
925 |
fprintf(f, "%sflowid %s ", |
925 |
fprintf(f, "%sflowid %s ", |
926 |
!sel || !(sel->flags&TC_U32_TERMINAL) ? "*" : "", |
926 |
!sel || !(sel->flags&TC_U32_TERMINAL) ? "*" : "", |
927 |
sprint_tc_classid(*(__u32*)RTA_DATA(tb[TCA_U32_CLASSID]), b1)); |
927 |
sprint_tc_classid(*(uint32_t*)RTA_DATA(tb[TCA_U32_CLASSID]), b1)); |
928 |
} else if (sel && sel->flags&TC_U32_TERMINAL) { |
928 |
} else if (sel && sel->flags&TC_U32_TERMINAL) { |
929 |
fprintf(f, "terminal flowid ??? "); |
929 |
fprintf(f, "terminal flowid ??? "); |
930 |
} |
930 |
} |
931 |
if (tb[TCA_U32_LINK]) { |
931 |
if (tb[TCA_U32_LINK]) { |
932 |
SPRINT_BUF(b1); |
932 |
SPRINT_BUF(b1); |
933 |
fprintf(f, "link %s ", sprint_u32_handle(*(__u32*)RTA_DATA(tb[TCA_U32_LINK]), b1)); |
933 |
fprintf(f, "link %s ", sprint_u32_handle(*(uint32_t*)RTA_DATA(tb[TCA_U32_LINK]), b1)); |
934 |
} |
934 |
} |
935 |
if (tb[TCA_U32_POLICE]) { |
935 |
if (tb[TCA_U32_POLICE]) { |
936 |
fprintf(f, "\n"); |
936 |
fprintf(f, "\n"); |