Lines Matching refs:sel

117 static int pack_key(struct tc_u32_sel *sel, __u32 key, __u32 mask,
121 int hwm = sel->nkeys;
126 if (sel->keys[i].off == off && sel->keys[i].offmask == offmask) {
127 __u32 intersect = mask&sel->keys[i].mask;
129 if ((key^sel->keys[i].val) & intersect)
131 sel->keys[i].val |= key;
132 sel->keys[i].mask |= mask;
141 sel->keys[hwm].val = key;
142 sel->keys[hwm].mask = mask;
143 sel->keys[hwm].off = off;
144 sel->keys[hwm].offmask = offmask;
145 sel->nkeys++;
149 static int pack_key32(struct tc_u32_sel *sel, __u32 key, __u32 mask,
154 return pack_key(sel, key, mask, off, offmask);
157 static int pack_key16(struct tc_u32_sel *sel, __u32 key, __u32 mask,
171 return pack_key(sel, key, mask, off, offmask);
174 static int pack_key8(struct tc_u32_sel *sel, __u32 key, __u32 mask, int off, int offmask)
193 return pack_key(sel, key, mask, off, offmask);
226 static int parse_u32(int *argc_p, char ***argv_p, struct tc_u32_sel *sel,
252 res = pack_key32(sel, key, mask, off, offmask);
258 static int parse_u16(int *argc_p, char ***argv_p, struct tc_u32_sel *sel,
283 res = pack_key16(sel, key, mask, off, offmask);
289 static int parse_u8(int *argc_p, char ***argv_p, struct tc_u32_sel *sel,
318 res = pack_key8(sel, key, mask, off, offmask);
324 static int parse_ip_addr(int *argc_p, char ***argv_p, struct tc_u32_sel *sel,
350 if (pack_key(sel, addr.data[0], mask, off, offmask) < 0)
360 struct tc_u32_sel *sel, int off)
387 res = pack_key(sel, addr.data[i/32],
393 res = pack_key(sel, addr.data[i/32],
406 static int parse_ip6_class(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
435 res = pack_key(sel, key, mask, off, offmask);
445 struct tc_u32_sel *sel, int off)
473 res = pack_key8(sel, addr[i], 0xFF, off + i, offmask);
483 static int parse_ip(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
494 res = parse_ip_addr(&argc, &argv, sel, 12);
497 res = parse_ip_addr(&argc, &argv, sel, 16);
501 res = parse_u8(&argc, &argv, sel, 1, 0);
504 res = parse_u8(&argc, &argv, sel, 0, 0);
507 res = parse_u8(&argc, &argv, sel, 9, 0);
510 res = parse_u8(&argc, &argv, sel, 1, 0);
513 res = pack_key16(sel, 0, 0x3FFF, 6, 0);
516 res = pack_key16(sel, 0, 0x1FFF, 6, 0);
519 res = pack_key16(sel, 0x4000, 0x4000, 6, 0);
522 res = pack_key16(sel, 0x2000, 0x2000, 6, 0);
525 res = parse_u16(&argc, &argv, sel, 22, 0);
528 res = parse_u16(&argc, &argv, sel, 20, 0);
531 res = parse_u8(&argc, &argv, sel, 20, 0);
534 res = parse_u8(&argc, &argv, sel, 20, 1);
543 static int parse_ip6(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
554 res = parse_ip6_addr(&argc, &argv, sel, 8);
557 res = parse_ip6_addr(&argc, &argv, sel, 24);
560 res = parse_ip6_class(&argc, &argv, sel);
563 res = parse_u8(&argc, &argv, sel, 6, 0);
566 res = parse_u32(&argc, &argv, sel, 0, 0);
569 res = parse_u16(&argc, &argv, sel, 42, 0);
572 res = parse_u16(&argc, &argv, sel, 40, 0);
575 res = parse_u8(&argc, &argv, sel, 40, 0);
578 res = parse_u8(&argc, &argv, sel, 41, 1);
587 static int parse_ether(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
598 res = parse_ether_addr(&argc, &argv, sel, -8);
601 res = parse_ether_addr(&argc, &argv, sel, -14);
613 static int parse_udp(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
624 res = parse_u16(&argc, &argv, sel, 0, -1);
627 res = parse_u16(&argc, &argv, sel, 2, -1);
637 static int parse_icmp(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
648 res = parse_u8(&argc, &argv, sel, 0, -1);
651 res = parse_u8(&argc, &argv, sel, 1, -1);
696 struct tc_u32_sel *sel, struct nlmsghdr *n)
707 res = parse_u32(&argc, &argv, sel, 0, 0);
710 res = parse_u16(&argc, &argv, sel, 0, 0);
713 res = parse_u8(&argc, &argv, sel, 0, 0);
716 res = parse_ip(&argc, &argv, sel);
719 res = parse_ip6(&argc, &argv, sel);
722 res = parse_udp(&argc, &argv, sel);
725 res = parse_tcp(&argc, &argv, sel);
728 res = parse_icmp(&argc, &argv, sel);
734 res = parse_ether(&argc, &argv, sel);
743 static int parse_offset(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
754 sel->off = off;
755 sel->flags |= TC_U32_OFFSET;
761 sel->offoff = off;
766 sel->flags |= TC_U32_VAROFFSET;
772 sel->offmask = htons(mask);
773 sel->flags |= TC_U32_VAROFFSET;
779 sel->offshift = shift;
780 sel->flags |= TC_U32_VAROFFSET;
782 sel->flags |= TC_U32_EAT;
794 static int parse_hashkey(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
805 sel->hmask = htonl(mask);
813 sel->hoff = num;
979 struct tc_u32_sel sel;
981 } sel;
989 memset(&sel, 0, sizeof(sel));
1005 if (parse_selector(&argc, &argv, &sel.sel, n)) {
1013 if (parse_offset(&argc, &argv, &sel.sel)) {
1020 if (parse_hashkey(&argc, &argv, &sel.sel)) {
1034 sel.sel.flags |= TC_U32_TERMINAL;
1083 struct tc_u32_sel sel;
1088 if (parse_selector(&argc, &argv, &sel2.sel, n)) {
1092 if (sel2.sel.nkeys != 1) {
1106 hash = sel2.sel.keys[0].val&sel2.sel.keys[0].mask;
1154 sel.sel.flags |= TC_U32_TERMINAL;
1167 addattr_l(n, MAX_MSG, TCA_U32_SEL, &sel,
1168 sizeof(sel.sel)+sel.sel.nkeys*sizeof(struct tc_u32_key));
1177 struct tc_u32_sel *sel = NULL;
1194 if (RTA_PAYLOAD(tb[TCA_U32_SEL]) < sizeof(*sel))
1197 sel = RTA_DATA(tb[TCA_U32_SEL]);
1212 !sel || !(sel->flags&TC_U32_TERMINAL) ? "*" : "",
1214 } else if (sel && sel->flags&TC_U32_TERMINAL) {
1231 if (sel && show_stats && NULL != pf)
1246 if (sel) {
1247 if (sel->nkeys) {
1249 for (i=0; i<sel->nkeys; i++) {
1250 show_keys(f, sel->keys + i);
1257 if (sel->flags&(TC_U32_VAROFFSET|TC_U32_OFFSET)) {
1259 if (sel->flags&TC_U32_VAROFFSET)
1261 ntohs(sel->offmask),
1262 sel->offshift, sel->offoff);
1263 if (sel->off)
1264 fprintf(f, "plus %d ", sel->off);
1266 if (sel->flags&TC_U32_EAT)
1269 if (sel->hmask) {
1271 (unsigned int)htonl(sel->hmask), sel->hoff);