Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
5273a00d
Commit
5273a00d
authored
Jun 08, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
parents
ce10d979
98e56405
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
322 additions
and
27 deletions
+322
-27
include/linux/tc_ematch/tc_em_meta.h
include/linux/tc_ematch/tc_em_meta.h
+30
-0
net/core/dev.c
net/core/dev.c
+1
-0
net/core/net-sysfs.c
net/core/net-sysfs.c
+17
-0
net/ipv6/ip6_tunnel.c
net/ipv6/ip6_tunnel.c
+1
-0
net/sched/Kconfig
net/sched/Kconfig
+1
-1
net/sched/cls_basic.c
net/sched/cls_basic.c
+3
-0
net/sched/em_meta.c
net/sched/em_meta.c
+269
-26
No files found.
include/linux/tc_ematch/tc_em_meta.h
View file @
5273a00d
...
...
@@ -56,6 +56,36 @@ enum
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)
...
...
net/core/dev.c
View file @
5273a00d
...
...
@@ -1744,6 +1744,7 @@ static int process_backlog(struct net_device *backlog_dev, int *budget)
struct
softnet_data
*
queue
=
&
__get_cpu_var
(
softnet_data
);
unsigned
long
start_time
=
jiffies
;
backlog_dev
->
weight
=
weight_p
;
for
(;;)
{
struct
sk_buff
*
skb
;
struct
net_device
*
dev
;
...
...
net/core/net-sysfs.c
View file @
5273a00d
...
...
@@ -185,6 +185,22 @@ static ssize_t store_tx_queue_len(struct class_device *dev, const char *buf, siz
static
CLASS_DEVICE_ATTR
(
tx_queue_len
,
S_IRUGO
|
S_IWUSR
,
show_tx_queue_len
,
store_tx_queue_len
);
NETDEVICE_SHOW
(
weight
,
fmt_dec
);
static
int
change_weight
(
struct
net_device
*
net
,
unsigned
long
new_weight
)
{
net
->
weight
=
new_weight
;
return
0
;
}
static
ssize_t
store_weight
(
struct
class_device
*
dev
,
const
char
*
buf
,
size_t
len
)
{
return
netdev_store
(
dev
,
buf
,
len
,
change_weight
);
}
static
CLASS_DEVICE_ATTR
(
weight
,
S_IRUGO
|
S_IWUSR
,
show_weight
,
store_weight
);
static
struct
class_device_attribute
*
net_class_attributes
[]
=
{
&
class_device_attr_ifindex
,
...
...
@@ -194,6 +210,7 @@ static struct class_device_attribute *net_class_attributes[] = {
&
class_device_attr_features
,
&
class_device_attr_mtu
,
&
class_device_attr_flags
,
&
class_device_attr_weight
,
&
class_device_attr_type
,
&
class_device_attr_address
,
&
class_device_attr_broadcast
,
...
...
net/ipv6/ip6_tunnel.c
View file @
5273a00d
...
...
@@ -882,6 +882,7 @@ ip6ip6_tnl_change(struct ip6_tnl *t, struct ip6_tnl_parm *p)
t
->
parms
.
hop_limit
=
p
->
hop_limit
;
t
->
parms
.
encap_limit
=
p
->
encap_limit
;
t
->
parms
.
flowinfo
=
p
->
flowinfo
;
t
->
parms
.
link
=
p
->
link
;
ip6ip6_tnl_link_config
(
t
);
return
0
;
}
...
...
net/sched/Kconfig
View file @
5273a00d
...
...
@@ -405,7 +405,7 @@ config NET_EMATCH_STACK
---help---
Size of the local stack variable used while evaluating the tree of
ematches. Limits the depth of the tree, i.e. the number of
encapsulated precedences. Every level requires 4 bytes of addtional
encapsulated precedences. Every level requires 4 bytes of add
i
tional
stack space.
config NET_EMATCH_CMP
...
...
net/sched/cls_basic.c
View file @
5273a00d
...
...
@@ -261,6 +261,9 @@ static int basic_dump(struct tcf_proto *tp, unsigned long fh,
rta
=
(
struct
rtattr
*
)
b
;
RTA_PUT
(
skb
,
TCA_OPTIONS
,
0
,
NULL
);
if
(
f
->
res
.
classid
)
RTA_PUT
(
skb
,
TCA_BASIC_CLASSID
,
sizeof
(
u32
),
&
f
->
res
.
classid
);
if
(
tcf_exts_dump
(
skb
,
&
f
->
exts
,
&
basic_ext_map
)
<
0
||
tcf_em_tree_dump
(
skb
,
&
f
->
ematches
,
TCA_BASIC_EMATCHES
)
<
0
)
goto
rtattr_failure
;
...
...
net/sched/em_meta.c
View file @
5273a00d
...
...
@@ -32,7 +32,7 @@
* +-----------+ +-----------+
* | |
* ---> meta_ops[INT][INDEV](...) |
*
|
|
*
|
|
* ----------- |
* V V
* +-----------+ +-----------+
...
...
@@ -70,6 +70,7 @@
#include <net/dst.h>
#include <net/route.h>
#include <net/pkt_cls.h>
#include <net/sock.h>
struct
meta_obj
{
...
...
@@ -283,6 +284,214 @@ META_COLLECTOR(int_rtiif)
dst
->
value
=
((
struct
rtable
*
)
skb
->
dst
)
->
fl
.
iif
;
}
/**************************************************************************
* Socket Attributes
**************************************************************************/
#define SKIP_NONLOCAL(skb) \
if (unlikely(skb->sk == NULL)) { \
*err = -1; \
return; \
}
META_COLLECTOR
(
int_sk_family
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_family
;
}
META_COLLECTOR
(
int_sk_state
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_state
;
}
META_COLLECTOR
(
int_sk_reuse
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_reuse
;
}
META_COLLECTOR
(
int_sk_bound_if
)
{
SKIP_NONLOCAL
(
skb
);
/* No error if bound_dev_if is 0, legal userspace check */
dst
->
value
=
skb
->
sk
->
sk_bound_dev_if
;
}
META_COLLECTOR
(
var_sk_bound_if
)
{
SKIP_NONLOCAL
(
skb
);
if
(
skb
->
sk
->
sk_bound_dev_if
==
0
)
{
dst
->
value
=
(
unsigned
long
)
"any"
;
dst
->
len
=
3
;
}
else
{
struct
net_device
*
dev
;
dev
=
dev_get_by_index
(
skb
->
sk
->
sk_bound_dev_if
);
*
err
=
var_dev
(
dev
,
dst
);
if
(
dev
)
dev_put
(
dev
);
}
}
META_COLLECTOR
(
int_sk_refcnt
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
atomic_read
(
&
skb
->
sk
->
sk_refcnt
);
}
META_COLLECTOR
(
int_sk_rcvbuf
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_rcvbuf
;
}
META_COLLECTOR
(
int_sk_shutdown
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_shutdown
;
}
META_COLLECTOR
(
int_sk_proto
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_protocol
;
}
META_COLLECTOR
(
int_sk_type
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_type
;
}
META_COLLECTOR
(
int_sk_rmem_alloc
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
atomic_read
(
&
skb
->
sk
->
sk_rmem_alloc
);
}
META_COLLECTOR
(
int_sk_wmem_alloc
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
atomic_read
(
&
skb
->
sk
->
sk_wmem_alloc
);
}
META_COLLECTOR
(
int_sk_omem_alloc
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
atomic_read
(
&
skb
->
sk
->
sk_omem_alloc
);
}
META_COLLECTOR
(
int_sk_rcv_qlen
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_receive_queue
.
qlen
;
}
META_COLLECTOR
(
int_sk_snd_qlen
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_write_queue
.
qlen
;
}
META_COLLECTOR
(
int_sk_wmem_queued
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_wmem_queued
;
}
META_COLLECTOR
(
int_sk_fwd_alloc
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_forward_alloc
;
}
META_COLLECTOR
(
int_sk_sndbuf
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_sndbuf
;
}
META_COLLECTOR
(
int_sk_alloc
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_allocation
;
}
META_COLLECTOR
(
int_sk_route_caps
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_route_caps
;
}
META_COLLECTOR
(
int_sk_hashent
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_hashent
;
}
META_COLLECTOR
(
int_sk_lingertime
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_lingertime
/
HZ
;
}
META_COLLECTOR
(
int_sk_err_qlen
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_error_queue
.
qlen
;
}
META_COLLECTOR
(
int_sk_ack_bl
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_ack_backlog
;
}
META_COLLECTOR
(
int_sk_max_ack_bl
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_max_ack_backlog
;
}
META_COLLECTOR
(
int_sk_prio
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_priority
;
}
META_COLLECTOR
(
int_sk_rcvlowat
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_rcvlowat
;
}
META_COLLECTOR
(
int_sk_rcvtimeo
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_rcvtimeo
/
HZ
;
}
META_COLLECTOR
(
int_sk_sndtimeo
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_sndtimeo
/
HZ
;
}
META_COLLECTOR
(
int_sk_sendmsg_off
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_sndmsg_off
;
}
META_COLLECTOR
(
int_sk_write_pend
)
{
SKIP_NONLOCAL
(
skb
);
dst
->
value
=
skb
->
sk
->
sk_write_pending
;
}
/**************************************************************************
* Meta value collectors assignment table
**************************************************************************/
...
...
@@ -293,41 +502,75 @@ struct meta_ops
struct
meta_value
*
,
struct
meta_obj
*
,
int
*
);
};
#define META_ID(name) TCF_META_ID_##name
#define META_FUNC(name) { .get = meta_##name }
/* Meta value operations table listing all meta value collectors and
* assigns them to a type and meta id. */
static
struct
meta_ops
__meta_ops
[
TCF_META_TYPE_MAX
+
1
][
TCF_META_ID_MAX
+
1
]
=
{
[
TCF_META_TYPE_VAR
]
=
{
[
TCF_META_ID_DEV
]
=
{
.
get
=
meta_var_dev
},
[
TCF_META_ID_INDEV
]
=
{
.
get
=
meta_var_indev
},
[
TCF_META_ID_REALDEV
]
=
{
.
get
=
meta_var_realdev
}
[
META_ID
(
DEV
)]
=
META_FUNC
(
var_dev
),
[
META_ID
(
INDEV
)]
=
META_FUNC
(
var_indev
),
[
META_ID
(
REALDEV
)]
=
META_FUNC
(
var_realdev
),
[
META_ID
(
SK_BOUND_IF
)]
=
META_FUNC
(
var_sk_bound_if
),
},
[
TCF_META_TYPE_INT
]
=
{
[
TCF_META_ID_RANDOM
]
=
{
.
get
=
meta_int_random
}
,
[
TCF_META_ID_LOADAVG_0
]
=
{
.
get
=
meta_int_loadavg_0
}
,
[
TCF_META_ID_LOADAVG_1
]
=
{
.
get
=
meta_int_loadavg_1
}
,
[
TCF_META_ID_LOADAVG_2
]
=
{
.
get
=
meta_int_loadavg_2
}
,
[
TCF_META_ID_DEV
]
=
{
.
get
=
meta_int_dev
}
,
[
TCF_META_ID_INDEV
]
=
{
.
get
=
meta_int_indev
}
,
[
TCF_META_ID_REALDEV
]
=
{
.
get
=
meta_int_realdev
}
,
[
TCF_META_ID_PRIORITY
]
=
{
.
get
=
meta_int_priority
}
,
[
TCF_META_ID_PROTOCOL
]
=
{
.
get
=
meta_int_protocol
}
,
[
TCF_META_ID_SECURITY
]
=
{
.
get
=
meta_int_security
}
,
[
TCF_META_ID_PKTTYPE
]
=
{
.
get
=
meta_int_pkttype
}
,
[
TCF_META_ID_PKTLEN
]
=
{
.
get
=
meta_int_pktlen
}
,
[
TCF_META_ID_DATALEN
]
=
{
.
get
=
meta_int_datalen
}
,
[
TCF_META_ID_MACLEN
]
=
{
.
get
=
meta_int_maclen
}
,
[
META_ID
(
RANDOM
)]
=
META_FUNC
(
int_random
)
,
[
META_ID
(
LOADAVG_0
)]
=
META_FUNC
(
int_loadavg_0
)
,
[
META_ID
(
LOADAVG_1
)]
=
META_FUNC
(
int_loadavg_1
)
,
[
META_ID
(
LOADAVG_2
)]
=
META_FUNC
(
int_loadavg_2
)
,
[
META_ID
(
DEV
)]
=
META_FUNC
(
int_dev
)
,
[
META_ID
(
INDEV
)]
=
META_FUNC
(
int_indev
)
,
[
META_ID
(
REALDEV
)]
=
META_FUNC
(
int_realdev
)
,
[
META_ID
(
PRIORITY
)]
=
META_FUNC
(
int_priority
)
,
[
META_ID
(
PROTOCOL
)]
=
META_FUNC
(
int_protocol
)
,
[
META_ID
(
SECURITY
)]
=
META_FUNC
(
int_security
)
,
[
META_ID
(
PKTTYPE
)]
=
META_FUNC
(
int_pkttype
)
,
[
META_ID
(
PKTLEN
)]
=
META_FUNC
(
int_pktlen
)
,
[
META_ID
(
DATALEN
)]
=
META_FUNC
(
int_datalen
)
,
[
META_ID
(
MACLEN
)]
=
META_FUNC
(
int_maclen
)
,
#ifdef CONFIG_NETFILTER
[
TCF_META_ID_NFMARK
]
=
{
.
get
=
meta_int_nfmark
}
,
[
META_ID
(
NFMARK
)]
=
META_FUNC
(
int_nfmark
)
,
#endif
[
TCF_META_ID_TCINDEX
]
=
{
.
get
=
meta_int_tcindex
}
,
[
META_ID
(
TCINDEX
)]
=
META_FUNC
(
int_tcindex
)
,
#ifdef CONFIG_NET_CLS_ACT
[
TCF_META_ID_TCVERDICT
]
=
{
.
get
=
meta_int_tcverd
}
,
[
TCF_META_ID_TCCLASSID
]
=
{
.
get
=
meta_int_tcclassid
}
,
[
META_ID
(
TCVERDICT
)]
=
META_FUNC
(
int_tcverd
)
,
[
META_ID
(
TCCLASSID
)]
=
META_FUNC
(
int_tcclassid
)
,
#endif
#ifdef CONFIG_NET_CLS_ROUTE
[
TCF_META_ID_RTCLASSID
]
=
{
.
get
=
meta_int_rtclassid
}
,
[
META_ID
(
RTCLASSID
)]
=
META_FUNC
(
int_rtclassid
)
,
#endif
[
TCF_META_ID_RTIIF
]
=
{
.
get
=
meta_int_rtiif
}
[
META_ID
(
RTIIF
)]
=
META_FUNC
(
int_rtiif
),
[
META_ID
(
SK_FAMILY
)]
=
META_FUNC
(
int_sk_family
),
[
META_ID
(
SK_STATE
)]
=
META_FUNC
(
int_sk_state
),
[
META_ID
(
SK_REUSE
)]
=
META_FUNC
(
int_sk_reuse
),
[
META_ID
(
SK_BOUND_IF
)]
=
META_FUNC
(
int_sk_bound_if
),
[
META_ID
(
SK_REFCNT
)]
=
META_FUNC
(
int_sk_refcnt
),
[
META_ID
(
SK_RCVBUF
)]
=
META_FUNC
(
int_sk_rcvbuf
),
[
META_ID
(
SK_SNDBUF
)]
=
META_FUNC
(
int_sk_sndbuf
),
[
META_ID
(
SK_SHUTDOWN
)]
=
META_FUNC
(
int_sk_shutdown
),
[
META_ID
(
SK_PROTO
)]
=
META_FUNC
(
int_sk_proto
),
[
META_ID
(
SK_TYPE
)]
=
META_FUNC
(
int_sk_type
),
[
META_ID
(
SK_RMEM_ALLOC
)]
=
META_FUNC
(
int_sk_rmem_alloc
),
[
META_ID
(
SK_WMEM_ALLOC
)]
=
META_FUNC
(
int_sk_wmem_alloc
),
[
META_ID
(
SK_OMEM_ALLOC
)]
=
META_FUNC
(
int_sk_omem_alloc
),
[
META_ID
(
SK_WMEM_QUEUED
)]
=
META_FUNC
(
int_sk_wmem_queued
),
[
META_ID
(
SK_RCV_QLEN
)]
=
META_FUNC
(
int_sk_rcv_qlen
),
[
META_ID
(
SK_SND_QLEN
)]
=
META_FUNC
(
int_sk_snd_qlen
),
[
META_ID
(
SK_ERR_QLEN
)]
=
META_FUNC
(
int_sk_err_qlen
),
[
META_ID
(
SK_FORWARD_ALLOCS
)]
=
META_FUNC
(
int_sk_fwd_alloc
),
[
META_ID
(
SK_ALLOCS
)]
=
META_FUNC
(
int_sk_alloc
),
[
META_ID
(
SK_ROUTE_CAPS
)]
=
META_FUNC
(
int_sk_route_caps
),
[
META_ID
(
SK_HASHENT
)]
=
META_FUNC
(
int_sk_hashent
),
[
META_ID
(
SK_LINGERTIME
)]
=
META_FUNC
(
int_sk_lingertime
),
[
META_ID
(
SK_ACK_BACKLOG
)]
=
META_FUNC
(
int_sk_ack_bl
),
[
META_ID
(
SK_MAX_ACK_BACKLOG
)]
=
META_FUNC
(
int_sk_max_ack_bl
),
[
META_ID
(
SK_PRIO
)]
=
META_FUNC
(
int_sk_prio
),
[
META_ID
(
SK_RCVLOWAT
)]
=
META_FUNC
(
int_sk_rcvlowat
),
[
META_ID
(
SK_RCVTIMEO
)]
=
META_FUNC
(
int_sk_rcvtimeo
),
[
META_ID
(
SK_SNDTIMEO
)]
=
META_FUNC
(
int_sk_sndtimeo
),
[
META_ID
(
SK_SENDMSG_OFF
)]
=
META_FUNC
(
int_sk_sendmsg_off
),
[
META_ID
(
SK_WRITE_PENDING
)]
=
META_FUNC
(
int_sk_write_pend
),
}
};
...
...
@@ -396,9 +639,9 @@ static int meta_int_compare(struct meta_obj *a, struct meta_obj *b)
/* Let gcc optimize it, the unlikely is not really based on
* some numbers but jump free code for mismatches seems
* more logical. */
if
(
unlikely
(
a
==
b
))
if
(
unlikely
(
a
->
value
==
b
->
value
))
return
0
;
else
if
(
a
<
b
)
else
if
(
a
->
value
<
b
->
value
)
return
-
1
;
else
return
1
;
...
...
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