Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
iproute2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
iproute2
Commits
c428e91b
Commit
c428e91b
authored
Jun 23, 2005
by
shemminger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
More missing cvs adds..
parent
6a805a65
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
284 additions
and
0 deletions
+284
-0
include/linux/tc_ematch/tc_em_cmp.h
include/linux/tc_ematch/tc_em_cmp.h
+26
-0
include/linux/tc_ematch/tc_em_meta.h
include/linux/tc_ematch/tc_em_meta.h
+99
-0
include/linux/tc_ematch/tc_em_nbyte.h
include/linux/tc_ematch/tc_em_nbyte.h
+13
-0
tc/f_basic.c
tc/f_basic.c
+146
-0
No files found.
include/linux/tc_ematch/tc_em_cmp.h
0 → 100644
View file @
c428e91b
#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
include/linux/tc_ematch/tc_em_meta.h
0 → 100644
View file @
c428e91b
#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
include/linux/tc_ematch/tc_em_nbyte.h
0 → 100644
View file @
c428e91b
#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
tc/f_basic.c
0 → 100644
View file @
c428e91b
/*
* 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
,
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment