mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-11-01 13:54:12 +00:00
More missing cvs adds..
This commit is contained in:
parent
6a805a65c0
commit
c428e91b5e
26
include/linux/tc_ematch/tc_em_cmp.h
Normal file
26
include/linux/tc_ematch/tc_em_cmp.h
Normal file
@ -0,0 +1,26 @@
|
||||
#ifndef __LINUX_TC_EM_CMP_H
|
||||
#define __LINUX_TC_EM_CMP_H
|
||||
|
||||
#include <linux/pkt_cls.h>
|
||||
|
||||
struct tcf_em_cmp
|
||||
{
|
||||
__u32 val;
|
||||
__u32 mask;
|
||||
__u16 off;
|
||||
__u8 align:4;
|
||||
__u8 flags:4;
|
||||
__u8 layer:4;
|
||||
__u8 opnd:4;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
TCF_EM_ALIGN_U8 = 1,
|
||||
TCF_EM_ALIGN_U16 = 2,
|
||||
TCF_EM_ALIGN_U32 = 4
|
||||
};
|
||||
|
||||
#define TCF_EM_CMP_TRANS 1
|
||||
|
||||
#endif
|
||||
99
include/linux/tc_ematch/tc_em_meta.h
Normal file
99
include/linux/tc_ematch/tc_em_meta.h
Normal file
@ -0,0 +1,99 @@
|
||||
#ifndef __LINUX_TC_EM_META_H
|
||||
#define __LINUX_TC_EM_META_H
|
||||
|
||||
#include <linux/pkt_cls.h>
|
||||
|
||||
enum
|
||||
{
|
||||
TCA_EM_META_UNSPEC,
|
||||
TCA_EM_META_HDR,
|
||||
TCA_EM_META_LVALUE,
|
||||
TCA_EM_META_RVALUE,
|
||||
__TCA_EM_META_MAX
|
||||
};
|
||||
#define TCA_EM_META_MAX (__TCA_EM_META_MAX - 1)
|
||||
|
||||
struct tcf_meta_val
|
||||
{
|
||||
__u16 kind;
|
||||
__u8 shift;
|
||||
__u8 op;
|
||||
};
|
||||
|
||||
#define TCF_META_TYPE_MASK (0xf << 12)
|
||||
#define TCF_META_TYPE(kind) (((kind) & TCF_META_TYPE_MASK) >> 12)
|
||||
#define TCF_META_ID_MASK 0x7ff
|
||||
#define TCF_META_ID(kind) ((kind) & TCF_META_ID_MASK)
|
||||
|
||||
enum
|
||||
{
|
||||
TCF_META_TYPE_VAR,
|
||||
TCF_META_TYPE_INT,
|
||||
__TCF_META_TYPE_MAX
|
||||
};
|
||||
#define TCF_META_TYPE_MAX (__TCF_META_TYPE_MAX - 1)
|
||||
|
||||
enum
|
||||
{
|
||||
TCF_META_ID_VALUE,
|
||||
TCF_META_ID_RANDOM,
|
||||
TCF_META_ID_LOADAVG_0,
|
||||
TCF_META_ID_LOADAVG_1,
|
||||
TCF_META_ID_LOADAVG_2,
|
||||
TCF_META_ID_DEV,
|
||||
TCF_META_ID_INDEV,
|
||||
TCF_META_ID_REALDEV,
|
||||
TCF_META_ID_PRIORITY,
|
||||
TCF_META_ID_PROTOCOL,
|
||||
TCF_META_ID_SECURITY,
|
||||
TCF_META_ID_PKTTYPE,
|
||||
TCF_META_ID_PKTLEN,
|
||||
TCF_META_ID_DATALEN,
|
||||
TCF_META_ID_MACLEN,
|
||||
TCF_META_ID_NFMARK,
|
||||
TCF_META_ID_TCINDEX,
|
||||
TCF_META_ID_TCVERDICT,
|
||||
TCF_META_ID_TCCLASSID,
|
||||
TCF_META_ID_RTCLASSID,
|
||||
TCF_META_ID_RTIIF,
|
||||
TCF_META_ID_SK_FAMILY,
|
||||
TCF_META_ID_SK_STATE,
|
||||
TCF_META_ID_SK_REUSE,
|
||||
TCF_META_ID_SK_BOUND_IF,
|
||||
TCF_META_ID_SK_REFCNT,
|
||||
TCF_META_ID_SK_SHUTDOWN,
|
||||
TCF_META_ID_SK_PROTO,
|
||||
TCF_META_ID_SK_TYPE,
|
||||
TCF_META_ID_SK_RCVBUF,
|
||||
TCF_META_ID_SK_RMEM_ALLOC,
|
||||
TCF_META_ID_SK_WMEM_ALLOC,
|
||||
TCF_META_ID_SK_OMEM_ALLOC,
|
||||
TCF_META_ID_SK_WMEM_QUEUED,
|
||||
TCF_META_ID_SK_RCV_QLEN,
|
||||
TCF_META_ID_SK_SND_QLEN,
|
||||
TCF_META_ID_SK_ERR_QLEN,
|
||||
TCF_META_ID_SK_FORWARD_ALLOCS,
|
||||
TCF_META_ID_SK_SNDBUF,
|
||||
TCF_META_ID_SK_ALLOCS,
|
||||
TCF_META_ID_SK_ROUTE_CAPS,
|
||||
TCF_META_ID_SK_HASHENT,
|
||||
TCF_META_ID_SK_LINGERTIME,
|
||||
TCF_META_ID_SK_ACK_BACKLOG,
|
||||
TCF_META_ID_SK_MAX_ACK_BACKLOG,
|
||||
TCF_META_ID_SK_PRIO,
|
||||
TCF_META_ID_SK_RCVLOWAT,
|
||||
TCF_META_ID_SK_RCVTIMEO,
|
||||
TCF_META_ID_SK_SNDTIMEO,
|
||||
TCF_META_ID_SK_SENDMSG_OFF,
|
||||
TCF_META_ID_SK_WRITE_PENDING,
|
||||
__TCF_META_ID_MAX
|
||||
};
|
||||
#define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1)
|
||||
|
||||
struct tcf_meta_hdr
|
||||
{
|
||||
struct tcf_meta_val left;
|
||||
struct tcf_meta_val right;
|
||||
};
|
||||
|
||||
#endif
|
||||
13
include/linux/tc_ematch/tc_em_nbyte.h
Normal file
13
include/linux/tc_ematch/tc_em_nbyte.h
Normal file
@ -0,0 +1,13 @@
|
||||
#ifndef __LINUX_TC_EM_NBYTE_H
|
||||
#define __LINUX_TC_EM_NBYTE_H
|
||||
|
||||
#include <linux/pkt_cls.h>
|
||||
|
||||
struct tcf_em_nbyte
|
||||
{
|
||||
__u16 off;
|
||||
__u16 len:12;
|
||||
__u8 layer:4;
|
||||
};
|
||||
|
||||
#endif
|
||||
146
tc/f_basic.c
Normal file
146
tc/f_basic.c
Normal file
@ -0,0 +1,146 @@
|
||||
/*
|
||||
* f_basic.c Basic Classifier
|
||||
*
|
||||
* This program is free software; you can u32istribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* Authors: Thomas Graf <tgraf@suug.ch>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <syslog.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <string.h>
|
||||
#include <linux/if.h>
|
||||
|
||||
#include "utils.h"
|
||||
#include "tc_util.h"
|
||||
#include "m_ematch.h"
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... basic [ match EMATCH_TREE ] [ police POLICE_SPEC ]\n");
|
||||
fprintf(stderr, " [ action ACTION_SPEC ] [ classid CLASSID ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where: SELECTOR := SAMPLE SAMPLE ...\n");
|
||||
fprintf(stderr, " FILTERID := X:Y:Z\n");
|
||||
}
|
||||
|
||||
static int basic_parse_opt(struct filter_util *qu, char *handle,
|
||||
int argc, char **argv, struct nlmsghdr *n)
|
||||
{
|
||||
struct tcmsg *t = NLMSG_DATA(n);
|
||||
struct rtattr *tail;
|
||||
long h = 0;
|
||||
|
||||
if (argc == 0)
|
||||
return 0;
|
||||
|
||||
if (handle) {
|
||||
h = strtol(handle, NULL, 0);
|
||||
if (h == LONG_MIN || h == LONG_MAX) {
|
||||
fprintf(stderr, "Illegal handle \"%s\", must be numeric.\n",
|
||||
handle);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
t->tcm_handle = h;
|
||||
|
||||
tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
|
||||
addattr_l(n, MAX_MSG, TCA_OPTIONS, NULL, 0);
|
||||
|
||||
while (argc > 0) {
|
||||
if (matches(*argv, "match") == 0) {
|
||||
NEXT_ARG();
|
||||
if (parse_ematch(&argc, &argv, TCA_BASIC_EMATCHES, n)) {
|
||||
fprintf(stderr, "Illegal \"ematch\"\n");
|
||||
return -1;
|
||||
}
|
||||
continue;
|
||||
} else if (matches(*argv, "classid") == 0 ||
|
||||
strcmp(*argv, "flowid") == 0) {
|
||||
unsigned handle;
|
||||
NEXT_ARG();
|
||||
if (get_tc_classid(&handle, *argv)) {
|
||||
fprintf(stderr, "Illegal \"classid\"\n");
|
||||
return -1;
|
||||
}
|
||||
addattr_l(n, MAX_MSG, TCA_BASIC_CLASSID, &handle, 4);
|
||||
} else if (matches(*argv, "action") == 0) {
|
||||
NEXT_ARG();
|
||||
if (parse_action(&argc, &argv, TCA_BASIC_ACT, n)) {
|
||||
fprintf(stderr, "Illegal \"action\"\n");
|
||||
return -1;
|
||||
}
|
||||
continue;
|
||||
|
||||
} else if (matches(*argv, "police") == 0) {
|
||||
NEXT_ARG();
|
||||
if (parse_police(&argc, &argv, TCA_BASIC_POLICE, n)) {
|
||||
fprintf(stderr, "Illegal \"police\"\n");
|
||||
return -1;
|
||||
}
|
||||
continue;
|
||||
} else if (strcmp(*argv, "help") == 0) {
|
||||
explain();
|
||||
return -1;
|
||||
} else {
|
||||
fprintf(stderr, "What is \"%s\"?\n", *argv);
|
||||
explain();
|
||||
return -1;
|
||||
}
|
||||
argc--; argv++;
|
||||
}
|
||||
|
||||
tail->rta_len = (((void*)n)+n->nlmsg_len) - (void*)tail;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int basic_print_opt(struct filter_util *qu, FILE *f,
|
||||
struct rtattr *opt, __u32 handle)
|
||||
{
|
||||
struct rtattr *tb[TCA_BASIC_MAX+1];
|
||||
|
||||
if (opt == NULL)
|
||||
return 0;
|
||||
|
||||
parse_rtattr_nested(tb, TCA_BASIC_MAX, opt);
|
||||
|
||||
if (handle)
|
||||
fprintf(f, "handle 0x%x ", handle);
|
||||
|
||||
if (tb[TCA_BASIC_CLASSID]) {
|
||||
SPRINT_BUF(b1);
|
||||
fprintf(f, "flowid %s ",
|
||||
sprint_tc_classid(*(__u32*)RTA_DATA(tb[TCA_BASIC_CLASSID]), b1));
|
||||
}
|
||||
|
||||
if (tb[TCA_BASIC_EMATCHES])
|
||||
print_ematch(f, tb[TCA_BASIC_EMATCHES]);
|
||||
|
||||
if (tb[TCA_BASIC_POLICE]) {
|
||||
fprintf(f, "\n");
|
||||
tc_print_police(f, tb[TCA_BASIC_POLICE]);
|
||||
}
|
||||
|
||||
if (tb[TCA_BASIC_ACT]) {
|
||||
tc_print_action(f, tb[TCA_BASIC_ACT]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct filter_util basic_filter_util = {
|
||||
.id = "basic",
|
||||
.parse_fopt = basic_parse_opt,
|
||||
.print_fopt = basic_print_opt,
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user