Home | History | Annotate | Download | only in tc

Lines Matching refs:sel

119 static int pack_key(struct tc_u32_sel *sel, __u32 key, __u32 mask,
123 int hwm = sel->nkeys;
128 if (sel->keys[i].off == off && sel->keys[i].offmask == offmask) {
129 __u32 intersect = mask&sel->keys[i].mask;
131 if ((key^sel->keys[i].val) & intersect)
133 sel->keys[i].val |= key;
134 sel->keys[i].mask |= mask;
143 sel->keys[hwm].val = key;
144 sel->keys[hwm].mask = mask;
145 sel->keys[hwm].off = off;
146 sel->keys[hwm].offmask = offmask;
147 sel->nkeys++;
151 static int pack_key32(struct tc_u32_sel *sel, __u32 key, __u32 mask,
156 return pack_key(sel, key, mask, off, offmask);
159 static int pack_key16(struct tc_u32_sel *sel, __u32 key, __u32 mask,
173 return pack_key(sel, key, mask, off, offmask);
176 static int pack_key8(struct tc_u32_sel *sel, __u32 key, __u32 mask, int off, int offmask)
195 return pack_key(sel, key, mask, off, offmask);
228 static int parse_u32(int *argc_p, char ***argv_p, struct tc_u32_sel *sel,
254 res = pack_key32(sel, key, mask, off, offmask);
260 static int parse_u16(int *argc_p, char ***argv_p, struct tc_u32_sel *sel,
285 res = pack_key16(sel, key, mask, off, offmask);
291 static int parse_u8(int *argc_p, char ***argv_p, struct tc_u32_sel *sel,
320 res = pack_key8(sel, key, mask, off, offmask);
326 static int parse_ip_addr(int *argc_p, char ***argv_p, struct tc_u32_sel *sel,
352 if (pack_key(sel, addr.data[0], mask, off, offmask) < 0)
362 struct tc_u32_sel *sel, int off)
389 res = pack_key(sel, addr.data[i/32],
395 res = pack_key(sel, addr.data[i/32],
409 struct tc_u32_sel *sel, int off)
440 res = pack_key16(sel, key, 0xFFFF, off + i, offmask);
450 static int parse_ip(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
461 res = parse_ip_addr(&argc, &argv, sel, 12);
464 res = parse_ip_addr(&argc, &argv, sel, 16);
468 res = parse_u8(&argc, &argv, sel, 1, 0);
471 res = parse_u8(&argc, &argv, sel, 0, 0);
474 res = parse_u8(&argc, &argv, sel, 9, 0);
477 res = parse_u8(&argc, &argv, sel, 1, 0);
480 res = pack_key16(sel, 0, 0x3FFF, 6, 0);
483 res = pack_key16(sel, 0, 0x1FFF, 6, 0);
486 res = pack_key16(sel, 0x4000, 0x4000, 6, 0);
489 res = pack_key16(sel, 0x2000, 0x2000, 6, 0);
492 res = parse_u16(&argc, &argv, sel, 22, 0);
495 res = parse_u16(&argc, &argv, sel, 20, 0);
498 res = parse_u8(&argc, &argv, sel, 20, 0);
501 res = parse_u8(&argc, &argv, sel, 20, 1);
510 static int parse_ip6(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
521 res = parse_ip6_addr(&argc, &argv, sel, 8);
524 res = parse_ip6_addr(&argc, &argv, sel, 24);
527 res = parse_u8(&argc, &argv, sel, 4, 0);
530 res = parse_u8(&argc, &argv, sel, 6, 0);
533 res = parse_u32(&argc, &argv, sel, 0, 0);
536 res = parse_u16(&argc, &argv, sel, 42, 0);
539 res = parse_u16(&argc, &argv, sel, 40, 0);
542 res = parse_u8(&argc, &argv, sel, 40, 0);
545 res = parse_u8(&argc, &argv, sel, 41, 1);
554 static int parse_ether(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
565 res = parse_ether_addr(&argc, &argv, sel, -8);
568 res = parse_ether_addr(&argc, &argv, sel, -14);
580 static int parse_udp(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
591 res = parse_u16(&argc, &argv, sel, 0, -1);
594 res = parse_u16(&argc, &argv, sel, 2, -1);
604 static int parse_icmp(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
615 res = parse_u8(&argc, &argv, sel, 0, -1);
618 res = parse_u8(&argc, &argv, sel, 1, -1);
663 struct tc_u32_sel *sel, struct nlmsghdr *n)
674 res = parse_u32(&argc, &argv, sel, 0, 0);
677 res = parse_u16(&argc, &argv, sel, 0, 0);
680 res = parse_u8(&argc, &argv, sel, 0, 0);
683 res = parse_ip(&argc, &argv, sel);
686 res = parse_ip6(&argc, &argv, sel);
689 res = parse_udp(&argc, &argv, sel);
692 res = parse_tcp(&argc, &argv, sel);
695 res = parse_icmp(&argc, &argv, sel);
701 res = parse_ether(&argc, &argv, sel);
710 static int parse_offset(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
721 sel->off = off;
722 sel->flags |= TC_U32_OFFSET;
728 sel->offoff = off;
733 sel->flags |= TC_U32_VAROFFSET;
739 sel->offmask = htons(mask);
740 sel->flags |= TC_U32_VAROFFSET;
746 sel->offshift = shift;
747 sel->flags |= TC_U32_VAROFFSET;
749 sel->flags |= TC_U32_EAT;
761 static int parse_hashkey(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
772 sel->hmask = htonl(mask);
780 sel->hoff = num;
946 struct tc_u32_sel sel;
948 } sel;
956 memset(&sel, 0, sizeof(sel));
972 if (parse_selector(&argc, &argv, &sel.sel, n)) {
980 if (parse_offset(&argc, &argv, &sel.sel)) {
987 if (parse_hashkey(&argc, &argv, &sel.sel)) {
1001 sel.sel.flags |= TC_U32_TERMINAL;
1050 struct tc_u32_sel sel;
1055 if (parse_selector(&argc, &argv, &sel2.sel, n)) {
1059 if (sel2.sel.nkeys != 1) {
1073 hash = sel2.sel.keys[0].val&sel2.sel.keys[0].mask;
1121 sel.sel.flags |= TC_U32_TERMINAL;
1134 addattr_l(n, MAX_MSG, TCA_U32_SEL, &sel,
1135 sizeof(sel.sel)+sel.sel.nkeys*sizeof(struct tc_u32_key));
1144 struct tc_u32_sel *sel = NULL;
1161 if (RTA_PAYLOAD(tb[TCA_U32_SEL]) < sizeof(*sel))
1164 sel = RTA_DATA(tb[TCA_U32_SEL]);
1179 !sel || !(sel->flags&TC_U32_TERMINAL) ? "*" : "",
1181 } else if (sel && sel->flags&TC_U32_TERMINAL) {
1198 if (sel && show_stats && NULL != pf)
1213 if (sel) {
1214 if (sel->nkeys) {
1216 for (i=0; i<sel->nkeys; i++) {
1217 show_keys(f, sel->keys + i);
1224 if (sel->flags&(TC_U32_VAROFFSET|TC_U32_OFFSET)) {
1226 if (sel->flags&TC_U32_VAROFFSET)
1228 ntohs(sel->offmask),
1229 sel->offshift, sel->offoff);
1230 if (sel->off)
1231 fprintf(f, "plus %d ", sel->off);
1233 if (sel->flags&TC_U32_EAT)
1236 if (sel->hmask) {
1238 (unsigned int)htonl(sel->hmask), sel->hoff);