Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
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
nexedi
linux
Commits
3626b045
Commit
3626b045
authored
Jun 02, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/net-2.6
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
10fb0484
71d50c2b
Changes
30
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
275 additions
and
233 deletions
+275
-233
include/net/ip.h
include/net/ip.h
+1
-1
include/net/ip6_fib.h
include/net/ip6_fib.h
+2
-0
include/net/ipv6.h
include/net/ipv6.h
+1
-1
include/net/route.h
include/net/route.h
+2
-0
include/net/snmp.h
include/net/snmp.h
+39
-48
net/ipv4/af_inet.c
net/ipv4/af_inet.c
+2
-2
net/ipv4/ip_forward.c
net/ipv4/ip_forward.c
+1
-1
net/ipv4/ip_fragment.c
net/ipv4/ip_fragment.c
+7
-7
net/ipv4/ip_input.c
net/ipv4/ip_input.c
+9
-9
net/ipv4/ip_output.c
net/ipv4/ip_output.c
+11
-11
net/ipv4/ipcomp.c
net/ipv4/ipcomp.c
+1
-0
net/ipv4/ipmr.c
net/ipv4/ipmr.c
+2
-2
net/ipv4/proc.c
net/ipv4/proc.c
+39
-11
net/ipv4/raw.c
net/ipv4/raw.c
+1
-1
net/ipv4/route.c
net/ipv4/route.c
+12
-0
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_ipv4.c
+2
-2
net/ipv6/af_inet6.c
net/ipv6/af_inet6.c
+4
-4
net/ipv6/exthdrs.c
net/ipv6/exthdrs.c
+14
-14
net/ipv6/icmp.c
net/ipv6/icmp.c
+1
-1
net/ipv6/ip6_input.c
net/ipv6/ip6_input.c
+12
-12
net/ipv6/ip6_output.c
net/ipv6/ip6_output.c
+24
-24
net/ipv6/ipv6_sockglue.c
net/ipv6/ipv6_sockglue.c
+1
-1
net/ipv6/mcast.c
net/ipv6/mcast.c
+8
-8
net/ipv6/ndisc.c
net/ipv6/ndisc.c
+4
-4
net/ipv6/proc.c
net/ipv6/proc.c
+33
-40
net/ipv6/raw.c
net/ipv6/raw.c
+2
-2
net/ipv6/reassembly.c
net/ipv6/reassembly.c
+14
-14
net/ipv6/route.c
net/ipv6/route.c
+25
-11
net/sctp/output.c
net/sctp/output.c
+1
-1
net/xfrm/xfrm_state.c
net/xfrm/xfrm_state.c
+0
-1
No files found.
include/net/ip.h
View file @
3626b045
...
...
@@ -150,7 +150,7 @@ struct ipv4_config
};
extern
struct
ipv4_config
ipv4_config
;
DECLARE_SNMP_STAT
(
struct
ip_mib
,
ip_statistics
);
DECLARE_SNMP_STAT
(
struct
ip
stats
_mib
,
ip_statistics
);
#define IP_INC_STATS(field) SNMP_INC_STATS(ip_statistics, field)
#define IP_INC_STATS_BH(field) SNMP_INC_STATS_BH(ip_statistics, field)
#define IP_INC_STATS_USER(field) SNMP_INC_STATS_USER(ip_statistics, field)
...
...
include/net/ip6_fib.h
View file @
3626b045
...
...
@@ -57,6 +57,8 @@ struct rt6_info
struct
rt6_info
*
next
;
}
u
;
struct
inet6_dev
*
rt6i_idev
;
#define rt6i_dev u.dst.dev
#define rt6i_nexthop u.dst.neighbour
#define rt6i_expires u.dst.expires
...
...
include/net/ipv6.h
View file @
3626b045
...
...
@@ -111,7 +111,7 @@ extern int sysctl_ipv6_bindv6only;
extern
int
sysctl_mld_max_msf
;
/* MIBs */
DECLARE_SNMP_STAT
(
struct
ip
v6
_mib
,
ipv6_statistics
);
DECLARE_SNMP_STAT
(
struct
ip
stats
_mib
,
ipv6_statistics
);
#define IP6_INC_STATS(field) SNMP_INC_STATS(ipv6_statistics, field)
#define IP6_INC_STATS_BH(field) SNMP_INC_STATS_BH(ipv6_statistics, field)
#define IP6_INC_STATS_USER(field) SNMP_INC_STATS_USER(ipv6_statistics, field)
...
...
include/net/route.h
View file @
3626b045
...
...
@@ -55,6 +55,8 @@ struct rtable
struct
rtable
*
rt_next
;
}
u
;
struct
in_device
*
idev
;
unsigned
rt_flags
;
unsigned
rt_type
;
...
...
include/net/snmp.h
View file @
3626b045
...
...
@@ -41,61 +41,52 @@
* cacheline machine it makes a *lot* of sense -AK
*/
struct
snmp_item
{
char
*
name
;
int
offset
;
};
#define SNMP_ITEM(mib,entry,procname) { \
.name = procname, \
.offset = offsetof(mib, entry), \
}
#define SNMP_ITEM_SENTINEL { \
.name = NULL, \
.offset = 0, \
}
/*
* RFC 1213: MIB-II
* RFC 2011 (updates 1213): SNMPv2-MIB-IP
* RFC 2863: Interfaces Group MIB
*/
struct
ip_mib
{
unsigned
long
IpInReceives
;
unsigned
long
IpInHdrErrors
;
unsigned
long
IpInAddrErrors
;
unsigned
long
IpForwDatagrams
;
unsigned
long
IpInUnknownProtos
;
unsigned
long
IpInDiscards
;
unsigned
long
IpInDelivers
;
unsigned
long
IpOutRequests
;
unsigned
long
IpOutDiscards
;
unsigned
long
IpOutNoRoutes
;
unsigned
long
IpReasmTimeout
;
unsigned
long
IpReasmReqds
;
unsigned
long
IpReasmOKs
;
unsigned
long
IpReasmFails
;
unsigned
long
IpFragOKs
;
unsigned
long
IpFragFails
;
unsigned
long
IpFragCreates
;
unsigned
long
__pad
[
0
];
};
/*
* RFC 2465: IPv6 MIB: General Group
* draft-ietf-ipv6-rfc2011-update-10.txt: MIB for IP: IP Statistics Tables
*/
struct
ip
v6
_mib
struct
ip
stats
_mib
{
unsigned
long
I
p6I
nReceives
;
unsigned
long
I
p6I
nHdrErrors
;
unsigned
long
I
p6I
nTooBigErrors
;
unsigned
long
I
p6I
nNoRoutes
;
unsigned
long
I
p6I
nAddrErrors
;
unsigned
long
I
p6I
nUnknownProtos
;
unsigned
long
I
p6I
nTruncatedPkts
;
unsigned
long
I
p6I
nDiscards
;
unsigned
long
I
p6I
nDelivers
;
unsigned
long
Ip6
OutForwDatagrams
;
unsigned
long
Ip6
OutRequests
;
unsigned
long
Ip6
OutDiscards
;
unsigned
long
Ip6
OutNoRoutes
;
unsigned
long
Ip6
ReasmTimeout
;
unsigned
long
Ip6
ReasmReqds
;
unsigned
long
Ip6
ReasmOKs
;
unsigned
long
Ip6
ReasmFails
;
unsigned
long
Ip6
FragOKs
;
unsigned
long
Ip6
FragFails
;
unsigned
long
Ip6
FragCreates
;
unsigned
long
I
p6I
nMcastPkts
;
unsigned
long
Ip6
OutMcastPkts
;
unsigned
long
InReceives
;
unsigned
long
InHdrErrors
;
unsigned
long
InTooBigErrors
;
unsigned
long
InNoRoutes
;
unsigned
long
InAddrErrors
;
unsigned
long
InUnknownProtos
;
unsigned
long
InTruncatedPkts
;
unsigned
long
InDiscards
;
unsigned
long
InDelivers
;
unsigned
long
OutForwDatagrams
;
unsigned
long
OutRequests
;
unsigned
long
OutDiscards
;
unsigned
long
OutNoRoutes
;
unsigned
long
ReasmTimeout
;
unsigned
long
ReasmReqds
;
unsigned
long
ReasmOKs
;
unsigned
long
ReasmFails
;
unsigned
long
FragOKs
;
unsigned
long
FragFails
;
unsigned
long
FragCreates
;
unsigned
long
InMcastPkts
;
unsigned
long
OutMcastPkts
;
unsigned
long
__pad
[
0
];
};
...
...
net/ipv4/af_inet.c
View file @
3626b045
...
...
@@ -1066,8 +1066,8 @@ static int __init init_ipv4_mibs(void)
{
net_statistics
[
0
]
=
alloc_percpu
(
struct
linux_mib
);
net_statistics
[
1
]
=
alloc_percpu
(
struct
linux_mib
);
ip_statistics
[
0
]
=
alloc_percpu
(
struct
ip_mib
);
ip_statistics
[
1
]
=
alloc_percpu
(
struct
ip_mib
);
ip_statistics
[
0
]
=
alloc_percpu
(
struct
ip
stats
_mib
);
ip_statistics
[
1
]
=
alloc_percpu
(
struct
ip
stats
_mib
);
icmp_statistics
[
0
]
=
alloc_percpu
(
struct
icmp_mib
);
icmp_statistics
[
1
]
=
alloc_percpu
(
struct
icmp_mib
);
tcp_statistics
[
0
]
=
alloc_percpu
(
struct
tcp_mib
);
...
...
net/ipv4/ip_forward.c
View file @
3626b045
...
...
@@ -46,7 +46,7 @@ static inline int ip_forward_finish(struct sk_buff *skb)
{
struct
ip_options
*
opt
=
&
(
IPCB
(
skb
)
->
opt
);
IP_INC_STATS_BH
(
Ip
ForwDatagrams
);
IP_INC_STATS_BH
(
Out
ForwDatagrams
);
if
(
unlikely
(
opt
->
optlen
))
ip_forward_options
(
skb
);
...
...
net/ipv4/ip_fragment.c
View file @
3626b045
...
...
@@ -263,7 +263,7 @@ static void ip_evictor(void)
spin_unlock
(
&
qp
->
lock
);
ipq_put
(
qp
);
IP_INC_STATS_BH
(
Ip
ReasmFails
);
IP_INC_STATS_BH
(
ReasmFails
);
}
}
...
...
@@ -281,8 +281,8 @@ static void ip_expire(unsigned long arg)
ipq_kill
(
qp
);
IP_INC_STATS_BH
(
Ip
ReasmTimeout
);
IP_INC_STATS_BH
(
Ip
ReasmFails
);
IP_INC_STATS_BH
(
ReasmTimeout
);
IP_INC_STATS_BH
(
ReasmFails
);
if
((
qp
->
last_in
&
FIRST_IN
)
&&
qp
->
fragments
!=
NULL
)
{
struct
sk_buff
*
head
=
qp
->
fragments
;
...
...
@@ -609,7 +609,7 @@ static struct sk_buff *ip_frag_reasm(struct ipq *qp, struct net_device *dev)
iph
=
head
->
nh
.
iph
;
iph
->
frag_off
=
0
;
iph
->
tot_len
=
htons
(
len
);
IP_INC_STATS_BH
(
Ip
ReasmOKs
);
IP_INC_STATS_BH
(
ReasmOKs
);
qp
->
fragments
=
NULL
;
return
head
;
...
...
@@ -625,7 +625,7 @@ static struct sk_buff *ip_frag_reasm(struct ipq *qp, struct net_device *dev)
"Oversized IP packet from %d.%d.%d.%d.
\n
"
,
NIPQUAD
(
qp
->
saddr
));
out_fail:
IP_INC_STATS_BH
(
Ip
ReasmFails
);
IP_INC_STATS_BH
(
ReasmFails
);
return
NULL
;
}
...
...
@@ -636,7 +636,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb)
struct
ipq
*
qp
;
struct
net_device
*
dev
;
IP_INC_STATS_BH
(
Ip
ReasmReqds
);
IP_INC_STATS_BH
(
ReasmReqds
);
/* Start by cleaning up the memory. */
if
(
atomic_read
(
&
ip_frag_mem
)
>
sysctl_ipfrag_high_thresh
)
...
...
@@ -661,7 +661,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb)
return
ret
;
}
IP_INC_STATS_BH
(
Ip
ReasmFails
);
IP_INC_STATS_BH
(
ReasmFails
);
kfree_skb
(
skb
);
return
NULL
;
}
...
...
net/ipv4/ip_input.c
View file @
3626b045
...
...
@@ -150,7 +150,7 @@
* SNMP management statistics
*/
DEFINE_SNMP_STAT
(
struct
ip_mib
,
ip_statistics
);
DEFINE_SNMP_STAT
(
struct
ip
stats
_mib
,
ip_statistics
);
/*
* Process Router Attention IP option
...
...
@@ -249,16 +249,16 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
protocol
=
-
ret
;
goto
resubmit
;
}
IP_INC_STATS_BH
(
I
pI
nDelivers
);
IP_INC_STATS_BH
(
InDelivers
);
}
else
{
if
(
!
raw_sk
)
{
if
(
xfrm4_policy_check
(
NULL
,
XFRM_POLICY_IN
,
skb
))
{
IP_INC_STATS_BH
(
I
pI
nUnknownProtos
);
IP_INC_STATS_BH
(
InUnknownProtos
);
icmp_send
(
skb
,
ICMP_DEST_UNREACH
,
ICMP_PROT_UNREACH
,
0
);
}
}
else
IP_INC_STATS_BH
(
I
pI
nDelivers
);
IP_INC_STATS_BH
(
InDelivers
);
kfree_skb
(
skb
);
}
}
...
...
@@ -324,7 +324,7 @@ static inline int ip_rcv_finish(struct sk_buff *skb)
*/
if
(
skb_cow
(
skb
,
skb_headroom
(
skb
)))
{
IP_INC_STATS_BH
(
I
pI
nDiscards
);
IP_INC_STATS_BH
(
InDiscards
);
goto
drop
;
}
iph
=
skb
->
nh
.
iph
;
...
...
@@ -353,7 +353,7 @@ static inline int ip_rcv_finish(struct sk_buff *skb)
return
dst_input
(
skb
);
inhdr_error:
IP_INC_STATS_BH
(
I
pI
nHdrErrors
);
IP_INC_STATS_BH
(
InHdrErrors
);
drop:
kfree_skb
(
skb
);
return
NET_RX_DROP
;
...
...
@@ -372,10 +372,10 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
if
(
skb
->
pkt_type
==
PACKET_OTHERHOST
)
goto
drop
;
IP_INC_STATS_BH
(
I
pI
nReceives
);
IP_INC_STATS_BH
(
InReceives
);
if
((
skb
=
skb_share_check
(
skb
,
GFP_ATOMIC
))
==
NULL
)
{
IP_INC_STATS_BH
(
I
pI
nDiscards
);
IP_INC_STATS_BH
(
InDiscards
);
goto
out
;
}
...
...
@@ -426,7 +426,7 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
ip_rcv_finish
);
inhdr_error:
IP_INC_STATS_BH
(
I
pI
nHdrErrors
);
IP_INC_STATS_BH
(
InHdrErrors
);
drop:
kfree_skb
(
skb
);
out:
...
...
net/ipv4/ip_output.c
View file @
3626b045
...
...
@@ -232,7 +232,7 @@ int ip_mc_output(struct sk_buff *skb)
/*
* If the indicated interface is up and running, send the packet.
*/
IP_INC_STATS
(
Ip
OutRequests
);
IP_INC_STATS
(
OutRequests
);
skb
->
dev
=
dev
;
skb
->
protocol
=
htons
(
ETH_P_IP
);
...
...
@@ -285,7 +285,7 @@ int ip_mc_output(struct sk_buff *skb)
int
ip_output
(
struct
sk_buff
*
skb
)
{
IP_INC_STATS
(
Ip
OutRequests
);
IP_INC_STATS
(
OutRequests
);
if
((
skb
->
len
>
dst_pmtu
(
skb
->
dst
)
||
skb_shinfo
(
skb
)
->
frag_list
)
&&
!
skb_shinfo
(
skb
)
->
tso_size
)
...
...
@@ -390,7 +390,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
dst_output
);
no_route:
IP_INC_STATS
(
Ip
OutNoRoutes
);
IP_INC_STATS
(
OutNoRoutes
);
kfree_skb
(
skb
);
return
-
EHOSTUNREACH
;
}
...
...
@@ -547,7 +547,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
}
if
(
err
==
0
)
{
IP_INC_STATS
(
Ip
FragOKs
);
IP_INC_STATS
(
FragOKs
);
return
0
;
}
...
...
@@ -556,7 +556,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
kfree_skb
(
frag
);
frag
=
skb
;
}
IP_INC_STATS
(
Ip
FragFails
);
IP_INC_STATS
(
FragFails
);
return
err
;
}
...
...
@@ -662,7 +662,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
* Put this fragment into the sending queue.
*/
IP_INC_STATS
(
Ip
FragCreates
);
IP_INC_STATS
(
FragCreates
);
iph
->
tot_len
=
htons
(
len
+
hlen
);
...
...
@@ -673,12 +673,12 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
goto
fail
;
}
kfree_skb
(
skb
);
IP_INC_STATS
(
Ip
FragOKs
);
IP_INC_STATS
(
FragOKs
);
return
err
;
fail:
kfree_skb
(
skb
);
IP_INC_STATS
(
Ip
FragFails
);
IP_INC_STATS
(
FragFails
);
return
err
;
}
...
...
@@ -975,7 +975,7 @@ int ip_append_data(struct sock *sk,
error:
inet
->
cork
.
length
-=
length
;
IP_INC_STATS
(
Ip
OutDiscards
);
IP_INC_STATS
(
OutDiscards
);
return
err
;
}
...
...
@@ -1088,7 +1088,7 @@ ssize_t ip_append_page(struct sock *sk, struct page *page,
error:
inet
->
cork
.
length
-=
size
;
IP_INC_STATS
(
Ip
OutDiscards
);
IP_INC_STATS
(
OutDiscards
);
return
err
;
}
...
...
@@ -1198,7 +1198,7 @@ int ip_push_pending_frames(struct sock *sk)
return
err
;
error:
IP_INC_STATS
(
Ip
OutDiscards
);
IP_INC_STATS
(
OutDiscards
);
goto
out
;
}
...
...
net/ipv4/ipcomp.c
View file @
3626b045
...
...
@@ -339,6 +339,7 @@ static void ipcomp_destroy(struct xfrm_state *x)
struct
ipcomp_data
*
ipcd
=
x
->
data
;
if
(
!
ipcd
)
return
;
xfrm_state_delete_tunnel
(
x
);
ipcomp_free_data
(
ipcd
);
kfree
(
ipcd
);
}
...
...
net/ipv4/ipmr.c
View file @
3626b045
...
...
@@ -1115,7 +1115,7 @@ static inline int ipmr_forward_finish(struct sk_buff *skb)
{
struct
ip_options
*
opt
=
&
(
IPCB
(
skb
)
->
opt
);
IP_INC_STATS_BH
(
Ip
ForwDatagrams
);
IP_INC_STATS_BH
(
Out
ForwDatagrams
);
if
(
unlikely
(
opt
->
optlen
))
ip_forward_options
(
skb
);
...
...
@@ -1178,7 +1178,7 @@ static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi)
to blackhole.
*/
IP_INC_STATS_BH
(
Ip
FragFails
);
IP_INC_STATS_BH
(
FragFails
);
ip_rt_put
(
rt
);
goto
out_free
;
}
...
...
net/ipv4/proc.c
View file @
3626b045
...
...
@@ -88,7 +88,7 @@ static struct file_operations sockstat_seq_fops = {
};
static
unsigned
long
fold_field
(
void
*
mib
[],
int
nr
)
__fold_field
(
void
*
mib
[],
int
offt
)
{
unsigned
long
res
=
0
;
int
i
;
...
...
@@ -98,14 +98,41 @@ fold_field(void *mib[], int nr)
continue
;
res
+=
*
((
unsigned
long
*
)
(((
void
*
)
per_cpu_ptr
(
mib
[
0
],
i
))
+
sizeof
(
unsigned
long
)
*
nr
));
offt
));
res
+=
*
((
unsigned
long
*
)
(((
void
*
)
per_cpu_ptr
(
mib
[
1
],
i
))
+
sizeof
(
unsigned
long
)
*
nr
));
offt
));
}
return
res
;
}
#define fold_field(_mib, _nr) __fold_field(_mib, (sizeof(unsigned long) * (_nr)))
/* snmp items */
static
struct
snmp_item
snmp4_ipstats_list
[]
=
{
#define __SNMP_GEN(x,y) SNMP_ITEM(struct ipstats_mib, x, y)
#define SNMP_GEN(x) __SNMP_GEN(x, #x)
SNMP_GEN
(
InReceives
),
SNMP_GEN
(
InHdrErrors
),
SNMP_GEN
(
InAddrErrors
),
__SNMP_GEN
(
OutForwDatagrams
,
"ForwDatagrams"
),
/* for backward compatibility */
SNMP_GEN
(
InUnknownProtos
),
SNMP_GEN
(
InDiscards
),
SNMP_GEN
(
InDelivers
),
SNMP_GEN
(
OutRequests
),
SNMP_GEN
(
OutDiscards
),
SNMP_GEN
(
OutNoRoutes
),
SNMP_GEN
(
ReasmTimeout
),
SNMP_GEN
(
ReasmReqds
),
SNMP_GEN
(
ReasmOKs
),
SNMP_GEN
(
ReasmFails
),
SNMP_GEN
(
FragOKs
),
SNMP_GEN
(
FragFails
),
SNMP_GEN
(
FragCreates
),
SNMP_ITEM_SENTINEL
#undef SNMP_GEN
};
/*
* Called from the PROCfs module. This outputs /proc/net/snmp.
*/
...
...
@@ -113,17 +140,18 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
{
int
i
;
seq_printf
(
seq
,
"Ip: Forwarding DefaultTTL InReceives InHdrErrors "
"InAddrErrors ForwDatagrams InUnknownProtos "
"InDiscards InDelivers OutRequests OutDiscards "
"OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs "
"ReasmFails FragOKs FragFails FragCreates
\n
Ip: %d %d"
,
seq_printf
(
seq
,
"Ip: Forwarding DefaultTTL"
);
for
(
i
=
0
;
snmp4_ipstats_list
[
i
].
name
!=
NULL
;
i
++
)
seq_printf
(
seq
,
" %s"
,
snmp4_ipstats_list
[
i
].
name
);
seq_printf
(
seq
,
"
\n
Ip: %d %d"
,
ipv4_devconf
.
forwarding
?
1
:
2
,
sysctl_ip_default_ttl
);
for
(
i
=
0
;
i
<
offsetof
(
struct
ip_mib
,
__pad
)
/
sizeof
(
unsigned
long
);
i
++
)
for
(
i
=
0
;
snmp4_ipstats_list
[
i
].
name
!=
NULL
;
i
++
)
seq_printf
(
seq
,
" %lu"
,
fold_field
((
void
**
)
ip_statistics
,
i
));
__fold_field
((
void
**
)
ip_statistics
,
snmp4_ipstats_list
[
i
].
offset
));
seq_printf
(
seq
,
"
\n
Icmp: InMsgs InErrors InDestUnreachs InTimeExcds "
"InParmProbs InSrcQuenchs InRedirects InEchos "
...
...
net/ipv4/raw.c
View file @
3626b045
...
...
@@ -319,7 +319,7 @@ static int raw_send_hdrinc(struct sock *sk, void *from, int length,
err
=
-
EFAULT
;
kfree_skb
(
skb
);
error:
IP_INC_STATS
(
Ip
OutDiscards
);
IP_INC_STATS
(
OutDiscards
);
return
err
;
}
...
...
net/ipv4/route.c
View file @
3626b045
...
...
@@ -1040,6 +1040,8 @@ void ip_rt_redirect(u32 old_gw, u32 daddr, u32 new_gw,
rt
->
u
.
dst
.
child
=
NULL
;
if
(
rt
->
u
.
dst
.
dev
)
dev_hold
(
rt
->
u
.
dst
.
dev
);
if
(
rt
->
idev
)
in_dev_hold
(
rt
->
idev
);
rt
->
u
.
dst
.
obsolete
=
0
;
rt
->
u
.
dst
.
lastuse
=
jiffies
;
rt
->
u
.
dst
.
path
=
&
rt
->
u
.
dst
;
...
...
@@ -1321,11 +1323,17 @@ static void ipv4_dst_destroy(struct dst_entry *dst)
{
struct
rtable
*
rt
=
(
struct
rtable
*
)
dst
;
struct
inet_peer
*
peer
=
rt
->
peer
;
struct
in_device
*
idev
=
rt
->
idev
;
if
(
peer
)
{
rt
->
peer
=
NULL
;
inet_putpeer
(
peer
);
}
if
(
idev
)
{
rt
->
idev
=
NULL
;
in_dev_put
(
idev
);
}
}
static
void
ipv4_link_failure
(
struct
sk_buff
*
skb
)
...
...
@@ -1486,6 +1494,7 @@ static int ip_route_input_mc(struct sk_buff *skb, u32 daddr, u32 saddr,
rth
->
fl
.
iif
=
dev
->
ifindex
;
rth
->
u
.
dst
.
dev
=
&
loopback_dev
;
dev_hold
(
rth
->
u
.
dst
.
dev
);
rth
->
idev
=
in_dev_get
(
rth
->
u
.
dst
.
dev
);
rth
->
fl
.
oif
=
0
;
rth
->
rt_gateway
=
daddr
;
rth
->
rt_spec_dst
=
spec_dst
;
...
...
@@ -1695,6 +1704,7 @@ static int ip_route_input_slow(struct sk_buff *skb, u32 daddr, u32 saddr,
rth
->
fl
.
iif
=
dev
->
ifindex
;
rth
->
u
.
dst
.
dev
=
out_dev
->
dev
;
dev_hold
(
rth
->
u
.
dst
.
dev
);
rth
->
idev
=
in_dev_get
(
rth
->
u
.
dst
.
dev
);
rth
->
fl
.
oif
=
0
;
rth
->
rt_spec_dst
=
spec_dst
;
...
...
@@ -1774,6 +1784,7 @@ out: return err;
rth
->
fl
.
iif
=
dev
->
ifindex
;
rth
->
u
.
dst
.
dev
=
&
loopback_dev
;
dev_hold
(
rth
->
u
.
dst
.
dev
);
rth
->
idev
=
in_dev_get
(
rth
->
u
.
dst
.
dev
);
rth
->
rt_gateway
=
daddr
;
rth
->
rt_spec_dst
=
spec_dst
;
rth
->
u
.
dst
.
input
=
ip_local_deliver
;
...
...
@@ -2157,6 +2168,7 @@ static int ip_route_output_slow(struct rtable **rp, const struct flowi *oldflp)
rth
->
rt_iif
=
oldflp
->
oif
?
:
dev_out
->
ifindex
;
rth
->
u
.
dst
.
dev
=
dev_out
;
dev_hold
(
dev_out
);
rth
->
idev
=
in_dev_get
(
dev_out
);
rth
->
rt_gateway
=
fl
.
fl4_dst
;
rth
->
rt_spec_dst
=
fl
.
fl4_src
;
...
...
net/ipv4/tcp_ipv4.c
View file @
3626b045
...
...
@@ -1290,12 +1290,12 @@ static struct dst_entry* tcp_v4_route_req(struct sock *sk,
.
dport
=
req
->
rmt_port
}
}
};
if
(
ip_route_output_flow
(
&
rt
,
&
fl
,
sk
,
0
))
{
IP_INC_STATS_BH
(
Ip
OutNoRoutes
);
IP_INC_STATS_BH
(
OutNoRoutes
);
return
NULL
;
}
if
(
opt
&&
opt
->
is_strictroute
&&
rt
->
rt_dst
!=
rt
->
rt_gateway
)
{
ip_rt_put
(
rt
);
IP_INC_STATS_BH
(
Ip
OutNoRoutes
);
IP_INC_STATS_BH
(
OutNoRoutes
);
return
NULL
;
}
return
&
rt
->
u
.
dst
;
...
...
net/ipv6/af_inet6.c
View file @
3626b045
...
...
@@ -667,14 +667,14 @@ snmp6_mib_free(void *ptr[2])
static
int
__init
init_ipv6_mibs
(
void
)
{
if
(
snmp6_mib_init
((
void
**
)
ipv6_statistics
,
sizeof
(
struct
ip
v6
_mib
),
__alignof__
(
struct
ip
v6
_mib
))
<
0
)
if
(
snmp6_mib_init
((
void
**
)
ipv6_statistics
,
sizeof
(
struct
ip
stats
_mib
),
__alignof__
(
struct
ip
stats
_mib
))
<
0
)
goto
err_ip_mib
;
if
(
snmp6_mib_init
((
void
**
)
icmpv6_statistics
,
sizeof
(
struct
icmpv6_mib
),
__alignof__
(
struct
ipv6_mib
))
<
0
)
__alignof__
(
struct
i
cm
pv6_mib
))
<
0
)
goto
err_icmp_mib
;
if
(
snmp6_mib_init
((
void
**
)
udp_stats_in6
,
sizeof
(
struct
udp_mib
),
__alignof__
(
struct
ipv6
_mib
))
<
0
)
__alignof__
(
struct
udp
_mib
))
<
0
)
goto
err_udp_mib
;
return
0
;
...
...
net/ipv6/exthdrs.c
View file @
3626b045
...
...
@@ -159,7 +159,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
if
(
!
pskb_may_pull
(
skb
,
(
skb
->
h
.
raw
-
skb
->
data
)
+
8
)
||
!
pskb_may_pull
(
skb
,
(
skb
->
h
.
raw
-
skb
->
data
)
+
((
skb
->
h
.
raw
[
1
]
+
1
)
<<
3
)))
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
kfree_skb
(
skb
);
return
-
1
;
}
...
...
@@ -172,7 +172,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
return
1
;
}
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
return
-
1
;
}
...
...
@@ -227,7 +227,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
if
(
!
pskb_may_pull
(
skb
,
(
skb
->
h
.
raw
-
skb
->
data
)
+
8
)
||
!
pskb_may_pull
(
skb
,
(
skb
->
h
.
raw
-
skb
->
data
)
+
((
skb
->
h
.
raw
[
1
]
+
1
)
<<
3
)))
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
kfree_skb
(
skb
);
return
-
1
;
}
...
...
@@ -236,7 +236,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
if
(
ipv6_addr_is_multicast
(
&
skb
->
nh
.
ipv6h
->
daddr
)
||
skb
->
pkt_type
!=
PACKET_HOST
)
{
IP6_INC_STATS_BH
(
I
p6I
nAddrErrors
);
IP6_INC_STATS_BH
(
InAddrErrors
);
kfree_skb
(
skb
);
return
-
1
;
}
...
...
@@ -252,13 +252,13 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
}
if
(
hdr
->
type
!=
IPV6_SRCRT_TYPE_0
)
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
icmpv6_param_prob
(
skb
,
ICMPV6_HDR_FIELD
,
(
&
hdr
->
type
)
-
skb
->
nh
.
raw
);
return
-
1
;
}
if
(
hdr
->
hdrlen
&
0x01
)
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
icmpv6_param_prob
(
skb
,
ICMPV6_HDR_FIELD
,
(
&
hdr
->
hdrlen
)
-
skb
->
nh
.
raw
);
return
-
1
;
}
...
...
@@ -271,7 +271,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
n
=
hdr
->
hdrlen
>>
1
;
if
(
hdr
->
segments_left
>
n
)
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
icmpv6_param_prob
(
skb
,
ICMPV6_HDR_FIELD
,
(
&
hdr
->
segments_left
)
-
skb
->
nh
.
raw
);
return
-
1
;
}
...
...
@@ -284,7 +284,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
kfree_skb
(
skb
);
/* the copy is a forwarded packet */
if
(
skb2
==
NULL
)
{
IP6_INC_STATS_BH
(
Ip6
OutDiscards
);
IP6_INC_STATS_BH
(
OutDiscards
);
return
-
1
;
}
*
skbp
=
skb
=
skb2
;
...
...
@@ -302,7 +302,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
addr
+=
i
-
1
;
if
(
ipv6_addr_is_multicast
(
addr
))
{
IP6_INC_STATS_BH
(
I
p6I
nAddrErrors
);
IP6_INC_STATS_BH
(
InAddrErrors
);
kfree_skb
(
skb
);
return
-
1
;
}
...
...
@@ -319,7 +319,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
}
if
(
skb
->
dst
->
dev
->
flags
&
IFF_LOOPBACK
)
{
if
(
skb
->
nh
.
ipv6h
->
hop_limit
<=
1
)
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
icmpv6_send
(
skb
,
ICMPV6_TIME_EXCEED
,
ICMPV6_EXC_HOPLIMIT
,
0
,
skb
->
dev
);
kfree_skb
(
skb
);
...
...
@@ -436,24 +436,24 @@ static int ipv6_hop_jumbo(struct sk_buff *skb, int optoff)
if
(
skb
->
nh
.
raw
[
optoff
+
1
]
!=
4
||
(
optoff
&
3
)
!=
2
)
{
LIMIT_NETDEBUG
(
printk
(
KERN_DEBUG
"ipv6_hop_jumbo: wrong jumbo opt length/alignment %d
\n
"
,
skb
->
nh
.
raw
[
optoff
+
1
]));
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
goto
drop
;
}
pkt_len
=
ntohl
(
*
(
u32
*
)(
skb
->
nh
.
raw
+
optoff
+
2
));
if
(
pkt_len
<=
IPV6_MAXPLEN
)
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
icmpv6_param_prob
(
skb
,
ICMPV6_HDR_FIELD
,
optoff
+
2
);
return
0
;
}
if
(
skb
->
nh
.
ipv6h
->
payload_len
)
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
icmpv6_param_prob
(
skb
,
ICMPV6_HDR_FIELD
,
optoff
);
return
0
;
}
if
(
pkt_len
>
skb
->
len
-
sizeof
(
struct
ipv6hdr
))
{
IP6_INC_STATS_BH
(
I
p6I
nTruncatedPkts
);
IP6_INC_STATS_BH
(
InTruncatedPkts
);
goto
drop
;
}
if
(
pkt_len
+
sizeof
(
struct
ipv6hdr
)
<
skb
->
len
)
{
...
...
net/ipv6/icmp.c
View file @
3626b045
...
...
@@ -174,7 +174,7 @@ static inline int icmpv6_xrlim_allow(struct sock *sk, int type,
*/
dst
=
ip6_route_output
(
sk
,
fl
);
if
(
dst
->
error
)
{
IP6_INC_STATS
(
Ip6
OutNoRoutes
);
IP6_INC_STATS
(
OutNoRoutes
);
}
else
if
(
dst
->
dev
&&
(
dst
->
dev
->
flags
&
IFF_LOOPBACK
))
{
res
=
1
;
}
else
{
...
...
net/ipv6/ip6_input.c
View file @
3626b045
...
...
@@ -64,10 +64,10 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
if
(
skb
->
pkt_type
==
PACKET_OTHERHOST
)
goto
drop
;
IP6_INC_STATS_BH
(
I
p6I
nReceives
);
IP6_INC_STATS_BH
(
InReceives
);
if
((
skb
=
skb_share_check
(
skb
,
GFP_ATOMIC
))
==
NULL
)
{
IP6_INC_STATS_BH
(
I
p6I
nDiscards
);
IP6_INC_STATS_BH
(
InDiscards
);
goto
out
;
}
...
...
@@ -80,7 +80,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
goto
err
;
if
(
!
pskb_may_pull
(
skb
,
sizeof
(
struct
ipv6hdr
)))
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
goto
drop
;
}
...
...
@@ -97,7 +97,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
goto
truncated
;
if
(
pkt_len
+
sizeof
(
struct
ipv6hdr
)
<
skb
->
len
)
{
if
(
__pskb_trim
(
skb
,
pkt_len
+
sizeof
(
struct
ipv6hdr
))){
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
goto
drop
;
}
hdr
=
skb
->
nh
.
ipv6h
;
...
...
@@ -109,7 +109,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
if
(
hdr
->
nexthdr
==
NEXTHDR_HOP
)
{
skb
->
h
.
raw
=
(
u8
*
)(
hdr
+
1
);
if
(
ipv6_parse_hopopts
(
skb
,
offsetof
(
struct
ipv6hdr
,
nexthdr
))
<
0
)
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
return
0
;
}
hdr
=
skb
->
nh
.
ipv6h
;
...
...
@@ -117,9 +117,9 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
return
NF_HOOK
(
PF_INET6
,
NF_IP6_PRE_ROUTING
,
skb
,
dev
,
NULL
,
ip6_rcv_finish
);
truncated:
IP6_INC_STATS_BH
(
I
p6I
nTruncatedPkts
);
IP6_INC_STATS_BH
(
InTruncatedPkts
);
err:
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
drop:
kfree_skb
(
skb
);
out:
...
...
@@ -194,15 +194,15 @@ static inline int ip6_input_finish(struct sk_buff *skb)
if
(
ret
>
0
)
goto
resubmit
;
else
if
(
ret
==
0
)
IP6_INC_STATS_BH
(
I
p6I
nDelivers
);
IP6_INC_STATS_BH
(
InDelivers
);
}
else
{
if
(
!
raw_sk
)
{
if
(
xfrm6_policy_check
(
NULL
,
XFRM_POLICY_IN
,
skb
))
{
IP6_INC_STATS_BH
(
I
p6I
nUnknownProtos
);
IP6_INC_STATS_BH
(
InUnknownProtos
);
icmpv6_param_prob
(
skb
,
ICMPV6_UNK_NEXTHDR
,
nhoff
);
}
}
else
{
IP6_INC_STATS_BH
(
I
p6I
nDelivers
);
IP6_INC_STATS_BH
(
InDelivers
);
kfree_skb
(
skb
);
}
}
...
...
@@ -210,7 +210,7 @@ static inline int ip6_input_finish(struct sk_buff *skb)
return
0
;
discard:
IP6_INC_STATS_BH
(
I
p6I
nDiscards
);
IP6_INC_STATS_BH
(
InDiscards
);
rcu_read_unlock
();
kfree_skb
(
skb
);
return
0
;
...
...
@@ -227,7 +227,7 @@ int ip6_mc_input(struct sk_buff *skb)
struct
ipv6hdr
*
hdr
;
int
deliver
;
IP6_INC_STATS_BH
(
I
p6I
nMcastPkts
);
IP6_INC_STATS_BH
(
InMcastPkts
);
hdr
=
skb
->
nh
.
ipv6h
;
deliver
=
likely
(
!
(
skb
->
dev
->
flags
&
(
IFF_PROMISC
|
IFF_ALLMULTI
)))
||
...
...
net/ipv6/ip6_output.c
View file @
3626b045
...
...
@@ -87,7 +87,7 @@ static inline int ip6_output_finish(struct sk_buff *skb)
}
else
if
(
dst
->
neighbour
)
return
dst
->
neighbour
->
output
(
skb
);
IP6_INC_STATS_BH
(
Ip6
OutNoRoutes
);
IP6_INC_STATS_BH
(
OutNoRoutes
);
kfree_skb
(
skb
);
return
-
EINVAL
;
...
...
@@ -132,13 +132,13 @@ int ip6_output2(struct sk_buff *skb)
ip6_dev_loopback_xmit
);
if
(
skb
->
nh
.
ipv6h
->
hop_limit
==
0
)
{
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
kfree_skb
(
skb
);
return
0
;
}
}
IP6_INC_STATS
(
Ip6
OutMcastPkts
);
IP6_INC_STATS
(
OutMcastPkts
);
}
return
NF_HOOK
(
PF_INET6
,
NF_IP6_POST_ROUTING
,
skb
,
NULL
,
skb
->
dev
,
ip6_output_finish
);
...
...
@@ -169,7 +169,7 @@ int ip6_route_me_harder(struct sk_buff *skb)
dst
=
ip6_route_output
(
skb
->
sk
,
&
fl
);
if
(
dst
->
error
)
{
IP6_INC_STATS
(
Ip6
OutNoRoutes
);
IP6_INC_STATS
(
OutNoRoutes
);
LIMIT_NETDEBUG
(
printk
(
KERN_DEBUG
"ip6_route_me_harder: No more route.
\n
"
));
dst_release
(
dst
);
...
...
@@ -228,7 +228,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
kfree_skb
(
skb
);
skb
=
skb2
;
if
(
skb
==
NULL
)
{
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
return
-
ENOBUFS
;
}
if
(
sk
)
...
...
@@ -262,7 +262,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
mtu
=
dst_pmtu
(
dst
);
if
((
skb
->
len
<=
mtu
)
||
ipfragok
)
{
IP6_INC_STATS
(
Ip6
OutRequests
);
IP6_INC_STATS
(
OutRequests
);
return
NF_HOOK
(
PF_INET6
,
NF_IP6_LOCAL_OUT
,
skb
,
NULL
,
dst
->
dev
,
ip6_maybe_reroute
);
}
...
...
@@ -270,7 +270,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
printk
(
KERN_DEBUG
"IPv6: sending pkt_too_big to self
\n
"
);
skb
->
dev
=
dst
->
dev
;
icmpv6_send
(
skb
,
ICMPV6_PKT_TOOBIG
,
0
,
mtu
,
skb
->
dev
);
IP6_INC_STATS
(
Ip6
FragFails
);
IP6_INC_STATS
(
FragFails
);
kfree_skb
(
skb
);
return
-
EMSGSIZE
;
}
...
...
@@ -352,7 +352,7 @@ int ip6_forward(struct sk_buff *skb)
goto
error
;
if
(
!
xfrm6_policy_check
(
NULL
,
XFRM_POLICY_FWD
,
skb
))
{
IP6_INC_STATS
(
I
p6I
nDiscards
);
IP6_INC_STATS
(
InDiscards
);
goto
drop
;
}
...
...
@@ -391,7 +391,7 @@ int ip6_forward(struct sk_buff *skb)
}
if
(
!
xfrm6_route_forward
(
skb
))
{
IP6_INC_STATS
(
I
p6I
nDiscards
);
IP6_INC_STATS
(
InDiscards
);
goto
drop
;
}
...
...
@@ -429,14 +429,14 @@ int ip6_forward(struct sk_buff *skb)
/* Again, force OUTPUT device used as source address */
skb
->
dev
=
dst
->
dev
;
icmpv6_send
(
skb
,
ICMPV6_PKT_TOOBIG
,
0
,
dst_pmtu
(
dst
),
skb
->
dev
);
IP6_INC_STATS_BH
(
I
p6I
nTooBigErrors
);
IP6_INC_STATS_BH
(
Ip6
FragFails
);
IP6_INC_STATS_BH
(
InTooBigErrors
);
IP6_INC_STATS_BH
(
FragFails
);
kfree_skb
(
skb
);
return
-
EMSGSIZE
;
}
if
(
skb_cow
(
skb
,
dst
->
dev
->
hard_header_len
))
{
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
goto
drop
;
}
...
...
@@ -446,11 +446,11 @@ int ip6_forward(struct sk_buff *skb)
hdr
->
hop_limit
--
;
IP6_INC_STATS_BH
(
Ip6
OutForwDatagrams
);
IP6_INC_STATS_BH
(
OutForwDatagrams
);
return
NF_HOOK
(
PF_INET6
,
NF_IP6_FORWARD
,
skb
,
skb
->
dev
,
dst
->
dev
,
ip6_forward_finish
);
error:
IP6_INC_STATS_BH
(
I
p6I
nAddrErrors
);
IP6_INC_STATS_BH
(
InAddrErrors
);
drop:
kfree_skb
(
skb
);
return
-
EINVAL
;
...
...
@@ -563,7 +563,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
tmp_hdr
=
kmalloc
(
hlen
,
GFP_ATOMIC
);
if
(
!
tmp_hdr
)
{
IP6_INC_STATS
(
Ip6
FragFails
);
IP6_INC_STATS
(
FragFails
);
return
-
ENOMEM
;
}
...
...
@@ -618,7 +618,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
kfree
(
tmp_hdr
);
if
(
err
==
0
)
{
IP6_INC_STATS
(
Ip6
FragOKs
);
IP6_INC_STATS
(
FragOKs
);
return
0
;
}
...
...
@@ -628,7 +628,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
frag
=
skb
;
}
IP6_INC_STATS
(
Ip6
FragFails
);
IP6_INC_STATS
(
FragFails
);
return
err
;
}
...
...
@@ -661,7 +661,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
if
((
frag
=
alloc_skb
(
len
+
hlen
+
sizeof
(
struct
frag_hdr
)
+
LL_RESERVED_SPACE
(
rt
->
u
.
dst
.
dev
),
GFP_ATOMIC
))
==
NULL
)
{
NETDEBUG
(
printk
(
KERN_INFO
"IPv6: frag: no memory for new fragment!
\n
"
));
IP6_INC_STATS
(
Ip6
FragFails
);
IP6_INC_STATS
(
FragFails
);
err
=
-
ENOMEM
;
goto
fail
;
}
...
...
@@ -719,19 +719,19 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
* Put this fragment into the sending queue.
*/
IP6_INC_STATS
(
Ip6
FragCreates
);
IP6_INC_STATS
(
FragCreates
);
err
=
output
(
frag
);
if
(
err
)
goto
fail
;
}
kfree_skb
(
skb
);
IP6_INC_STATS
(
Ip6
FragOKs
);
IP6_INC_STATS
(
FragOKs
);
return
err
;
fail:
kfree_skb
(
skb
);
IP6_INC_STATS
(
Ip6
FragFails
);
IP6_INC_STATS
(
FragFails
);
return
err
;
}
...
...
@@ -1016,7 +1016,7 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to, int offse
return
0
;
error:
inet
->
cork
.
length
-=
length
;
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
return
err
;
}
...
...
@@ -1076,7 +1076,7 @@ int ip6_push_pending_frames(struct sock *sk)
ipv6_addr_copy
(
&
hdr
->
daddr
,
final_dst
);
skb
->
dst
=
dst_clone
(
&
rt
->
u
.
dst
);
IP6_INC_STATS
(
Ip6
OutRequests
);
IP6_INC_STATS
(
OutRequests
);
err
=
NF_HOOK
(
PF_INET6
,
NF_IP6_LOCAL_OUT
,
skb
,
NULL
,
skb
->
dst
->
dev
,
dst_output
);
if
(
err
)
{
if
(
err
>
0
)
...
...
@@ -1108,7 +1108,7 @@ void ip6_flush_pending_frames(struct sock *sk)
struct
sk_buff
*
skb
;
while
((
skb
=
__skb_dequeue_tail
(
&
sk
->
sk_write_queue
))
!=
NULL
)
{
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
kfree_skb
(
skb
);
}
...
...
net/ipv6/ipv6_sockglue.c
View file @
3626b045
...
...
@@ -55,7 +55,7 @@
#include <asm/uaccess.h>
DEFINE_SNMP_STAT
(
struct
ip
v6
_mib
,
ipv6_statistics
);
DEFINE_SNMP_STAT
(
struct
ip
stats
_mib
,
ipv6_statistics
);
static
struct
packet_type
ipv6_packet_type
=
{
.
type
=
__constant_htons
(
ETH_P_IPV6
),
...
...
net/ipv6/mcast.c
View file @
3626b045
...
...
@@ -1317,7 +1317,7 @@ static void mld_sendpack(struct sk_buff *skb)
struct
inet6_dev
*
idev
=
in6_dev_get
(
skb
->
dev
);
int
err
;
IP6_INC_STATS
(
Ip6
OutRequests
);
IP6_INC_STATS
(
OutRequests
);
payload_len
=
skb
->
tail
-
(
unsigned
char
*
)
skb
->
nh
.
ipv6h
-
sizeof
(
struct
ipv6hdr
);
mldlen
=
skb
->
tail
-
skb
->
h
.
raw
;
...
...
@@ -1329,9 +1329,9 @@ static void mld_sendpack(struct sk_buff *skb)
dev_queue_xmit
);
if
(
!
err
)
{
ICMP6_INC_STATS
(
idev
,
Icmp6OutMsgs
);
IP6_INC_STATS
(
Ip6
OutMcastPkts
);
IP6_INC_STATS
(
OutMcastPkts
);
}
else
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
if
(
likely
(
idev
!=
NULL
))
in6_dev_put
(
idev
);
...
...
@@ -1613,7 +1613,7 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
IPV6_TLV_ROUTERALERT
,
2
,
0
,
0
,
IPV6_TLV_PADN
,
0
};
IP6_INC_STATS
(
Ip6
OutRequests
);
IP6_INC_STATS
(
OutRequests
);
snd_addr
=
addr
;
if
(
type
==
ICMPV6_MGM_REDUCTION
)
{
snd_addr
=
&
all_routers
;
...
...
@@ -1627,7 +1627,7 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
skb
=
sock_alloc_send_skb
(
sk
,
LL_RESERVED_SPACE
(
dev
)
+
full_len
,
1
,
&
err
);
if
(
skb
==
NULL
)
{
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
return
;
}
...
...
@@ -1672,16 +1672,16 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
else
ICMP6_INC_STATS
(
idev
,
Icmp6OutGroupMembResponses
);
ICMP6_INC_STATS
(
idev
,
Icmp6OutMsgs
);
IP6_INC_STATS
(
Ip6
OutMcastPkts
);
IP6_INC_STATS
(
OutMcastPkts
);
}
else
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
if
(
likely
(
idev
!=
NULL
))
in6_dev_put
(
idev
);
return
;
out:
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
kfree_skb
(
skb
);
}
...
...
net/ipv6/ndisc.c
View file @
3626b045
...
...
@@ -452,7 +452,7 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
skb
->
dst
=
dst
;
idev
=
in6_dev_get
(
dst
->
dev
);
IP6_INC_STATS
(
Ip6
OutRequests
);
IP6_INC_STATS
(
OutRequests
);
err
=
NF_HOOK
(
PF_INET6
,
NF_IP6_LOCAL_OUT
,
skb
,
NULL
,
dst
->
dev
,
dst_output
);
if
(
!
err
)
{
ICMP6_INC_STATS
(
idev
,
Icmp6OutNeighborAdvertisements
);
...
...
@@ -536,7 +536,7 @@ void ndisc_send_ns(struct net_device *dev, struct neighbour *neigh,
/* send it! */
skb
->
dst
=
dst
;
idev
=
in6_dev_get
(
dst
->
dev
);
IP6_INC_STATS
(
Ip6
OutRequests
);
IP6_INC_STATS
(
OutRequests
);
err
=
NF_HOOK
(
PF_INET6
,
NF_IP6_LOCAL_OUT
,
skb
,
NULL
,
dst
->
dev
,
dst_output
);
if
(
!
err
)
{
ICMP6_INC_STATS
(
idev
,
Icmp6OutNeighborSolicits
);
...
...
@@ -609,7 +609,7 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
/* send it! */
skb
->
dst
=
dst
;
idev
=
in6_dev_get
(
dst
->
dev
);
IP6_INC_STATS
(
Ip6
OutRequests
);
IP6_INC_STATS
(
OutRequests
);
err
=
NF_HOOK
(
PF_INET6
,
NF_IP6_LOCAL_OUT
,
skb
,
NULL
,
dst
->
dev
,
dst_output
);
if
(
!
err
)
{
ICMP6_INC_STATS
(
idev
,
Icmp6OutRouterSolicits
);
...
...
@@ -1335,7 +1335,7 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
buff
->
dst
=
dst
;
idev
=
in6_dev_get
(
dst
->
dev
);
IP6_INC_STATS
(
Ip6
OutRequests
);
IP6_INC_STATS
(
OutRequests
);
err
=
NF_HOOK
(
PF_INET6
,
NF_IP6_LOCAL_OUT
,
buff
,
NULL
,
dst
->
dev
,
dst_output
);
if
(
!
err
)
{
ICMP6_INC_STATS
(
idev
,
Icmp6OutRedirects
);
...
...
net/ipv6/proc.c
View file @
3626b045
...
...
@@ -57,43 +57,36 @@ static int sockstat6_seq_show(struct seq_file *seq, void *v)
return
0
;
}
struct
snmp6_item
{
char
*
name
;
int
offset
;
};
#define SNMP6_SENTINEL { .name = NULL, .offset = 0 }
static
struct
snmp6_item
snmp6_ipv6_list
[]
=
{
static
struct
snmp_item
snmp6_ipstats_list
[]
=
{
/* ipv6 mib according to RFC 2465 */
#define SNMP6_GEN(x)
{ .name = #x , .offset = offsetof(struct ipv6_mib, x) }
SNMP6_GEN
(
I
p6I
nReceives
),
SNMP6_GEN
(
I
p6I
nHdrErrors
),
SNMP6_GEN
(
I
p6I
nTooBigErrors
),
SNMP6_GEN
(
I
p6I
nNoRoutes
),
SNMP6_GEN
(
I
p6I
nAddrErrors
),
SNMP6_GEN
(
I
p6I
nUnknownProtos
),
SNMP6_GEN
(
I
p6I
nTruncatedPkts
),
SNMP6_GEN
(
I
p6I
nDiscards
),
SNMP6_GEN
(
I
p6I
nDelivers
),
SNMP6_GEN
(
Ip6
OutForwDatagrams
),
SNMP6_GEN
(
Ip6
OutRequests
),
SNMP6_GEN
(
Ip6
OutDiscards
),
SNMP6_GEN
(
Ip6
OutNoRoutes
),
SNMP6_GEN
(
Ip6
ReasmTimeout
),
SNMP6_GEN
(
Ip6
ReasmReqds
),
SNMP6_GEN
(
Ip6
ReasmOKs
),
SNMP6_GEN
(
Ip6
ReasmFails
),
SNMP6_GEN
(
Ip6
FragOKs
),
SNMP6_GEN
(
Ip6
FragFails
),
SNMP6_GEN
(
Ip6
FragCreates
),
SNMP6_GEN
(
I
p6I
nMcastPkts
),
SNMP6_GEN
(
Ip6
OutMcastPkts
),
#define SNMP6_GEN(x)
SNMP_ITEM(struct ipstats_mib, x, "Ip6" #x)
SNMP6_GEN
(
InReceives
),
SNMP6_GEN
(
InHdrErrors
),
SNMP6_GEN
(
InTooBigErrors
),
SNMP6_GEN
(
InNoRoutes
),
SNMP6_GEN
(
InAddrErrors
),
SNMP6_GEN
(
InUnknownProtos
),
SNMP6_GEN
(
InTruncatedPkts
),
SNMP6_GEN
(
InDiscards
),
SNMP6_GEN
(
InDelivers
),
SNMP6_GEN
(
OutForwDatagrams
),
SNMP6_GEN
(
OutRequests
),
SNMP6_GEN
(
OutDiscards
),
SNMP6_GEN
(
OutNoRoutes
),
SNMP6_GEN
(
ReasmTimeout
),
SNMP6_GEN
(
ReasmReqds
),
SNMP6_GEN
(
ReasmOKs
),
SNMP6_GEN
(
ReasmFails
),
SNMP6_GEN
(
FragOKs
),
SNMP6_GEN
(
FragFails
),
SNMP6_GEN
(
FragCreates
),
SNMP6_GEN
(
InMcastPkts
),
SNMP6_GEN
(
OutMcastPkts
),
#undef SNMP6_GEN
SNMP
6
_SENTINEL
SNMP
_ITEM
_SENTINEL
};
static
struct
snmp
6
_item
snmp6_icmp6_list
[]
=
{
static
struct
snmp_item
snmp6_icmp6_list
[]
=
{
/* icmpv6 mib according to RFC 2466
Exceptions: {In|Out}AdminProhibs are removed, because I see
...
...
@@ -104,7 +97,7 @@ static struct snmp6_item snmp6_icmp6_list[] = {
OutRouterAdvertisements too.
OutGroupMembQueries too.
*/
#define SNMP6_GEN(x)
{ .name = #x , .offset = offsetof(struct icmpv6_mib, x) }
#define SNMP6_GEN(x)
SNMP_ITEM(struct icmpv6_mib, x, #x)
SNMP6_GEN
(
Icmp6InMsgs
),
SNMP6_GEN
(
Icmp6InErrors
),
SNMP6_GEN
(
Icmp6InDestUnreachs
),
...
...
@@ -134,17 +127,17 @@ static struct snmp6_item snmp6_icmp6_list[] = {
SNMP6_GEN
(
Icmp6OutGroupMembResponses
),
SNMP6_GEN
(
Icmp6OutGroupMembReductions
),
#undef SNMP6_GEN
SNMP
6
_SENTINEL
SNMP
_ITEM
_SENTINEL
};
static
struct
snmp
6
_item
snmp6_udp6_list
[]
=
{
#define SNMP6_GEN(x)
{ .name = "Udp6" #x , .offset = offsetof(struct udp_mib, Udp##x) }
static
struct
snmp_item
snmp6_udp6_list
[]
=
{
#define SNMP6_GEN(x)
SNMP_ITEM(struct udp_mib, Udp##x, "Udp6" #x)
SNMP6_GEN
(
InDatagrams
),
SNMP6_GEN
(
NoPorts
),
SNMP6_GEN
(
InErrors
),
SNMP6_GEN
(
OutDatagrams
),
#undef SNMP6_GEN
SNMP
6
_SENTINEL
SNMP
_ITEM
_SENTINEL
};
static
unsigned
long
...
...
@@ -167,7 +160,7 @@ fold_field(void *mib[], int offt)
}
static
inline
void
snmp6_seq_show_item
(
struct
seq_file
*
seq
,
void
**
mib
,
struct
snmp
6
_item
*
itemlist
)
snmp6_seq_show_item
(
struct
seq_file
*
seq
,
void
**
mib
,
struct
snmp_item
*
itemlist
)
{
int
i
;
for
(
i
=
0
;
itemlist
[
i
].
name
;
i
++
)
...
...
@@ -183,7 +176,7 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)
seq_printf
(
seq
,
"%-32s
\t
%u
\n
"
,
"ifIndex"
,
idev
->
dev
->
ifindex
);
snmp6_seq_show_item
(
seq
,
(
void
**
)
idev
->
stats
.
icmpv6
,
snmp6_icmp6_list
);
}
else
{
snmp6_seq_show_item
(
seq
,
(
void
**
)
ipv6_statistics
,
snmp6_ip
v6
_list
);
snmp6_seq_show_item
(
seq
,
(
void
**
)
ipv6_statistics
,
snmp6_ip
stats
_list
);
snmp6_seq_show_item
(
seq
,
(
void
**
)
icmpv6_statistics
,
snmp6_icmp6_list
);
snmp6_seq_show_item
(
seq
,
(
void
**
)
udp_stats_in6
,
snmp6_udp6_list
);
}
...
...
net/ipv6/raw.c
View file @
3626b045
...
...
@@ -535,7 +535,7 @@ static int rawv6_send_hdrinc(struct sock *sk, void *from, int length,
if
(
err
)
goto
error_fault
;
IP6_INC_STATS
(
Ip6
OutRequests
);
IP6_INC_STATS
(
OutRequests
);
err
=
NF_HOOK
(
PF_INET6
,
NF_IP6_LOCAL_OUT
,
skb
,
NULL
,
rt
->
u
.
dst
.
dev
,
dst_output
);
if
(
err
>
0
)
...
...
@@ -549,7 +549,7 @@ static int rawv6_send_hdrinc(struct sock *sk, void *from, int length,
err
=
-
EFAULT
;
kfree_skb
(
skb
);
error:
IP6_INC_STATS
(
Ip6
OutDiscards
);
IP6_INC_STATS
(
OutDiscards
);
return
err
;
}
static
int
rawv6_sendmsg
(
struct
kiocb
*
iocb
,
struct
sock
*
sk
,
...
...
net/ipv6/reassembly.c
View file @
3626b045
...
...
@@ -284,7 +284,7 @@ static void ip6_evictor(void)
spin_unlock
(
&
fq
->
lock
);
fq_put
(
fq
);
IP6_INC_STATS_BH
(
Ip6
ReasmFails
);
IP6_INC_STATS_BH
(
ReasmFails
);
}
}
...
...
@@ -299,8 +299,8 @@ static void ip6_frag_expire(unsigned long data)
fq_kill
(
fq
);
IP6_INC_STATS_BH
(
Ip6
ReasmTimeout
);
IP6_INC_STATS_BH
(
Ip6
ReasmFails
);
IP6_INC_STATS_BH
(
ReasmTimeout
);
IP6_INC_STATS_BH
(
ReasmFails
);
/* Send error only if the first segment arrived. */
if
(
fq
->
last_in
&
FIRST_IN
&&
fq
->
fragments
)
{
...
...
@@ -386,7 +386,7 @@ ip6_frag_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr
return
ip6_frag_intern
(
hash
,
fq
);
oom:
IP6_INC_STATS_BH
(
Ip6
ReasmFails
);
IP6_INC_STATS_BH
(
ReasmFails
);
return
NULL
;
}
...
...
@@ -426,7 +426,7 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
((
u8
*
)
(
fhdr
+
1
)
-
(
u8
*
)
(
skb
->
nh
.
ipv6h
+
1
)));
if
((
unsigned
int
)
end
>
IPV6_MAXPLEN
)
{
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
icmpv6_param_prob
(
skb
,
ICMPV6_HDR_FIELD
,
(
u8
*
)
&
fhdr
->
frag_off
-
skb
->
nh
.
raw
);
return
;
}
...
...
@@ -453,7 +453,7 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
/* RFC2460 says always send parameter problem in
* this case. -DaveM
*/
IP6_INC_STATS_BH
(
I
p6I
nHdrErrors
);
IP6_INC_STATS_BH
(
InHdrErrors
);
icmpv6_param_prob
(
skb
,
ICMPV6_HDR_FIELD
,
offsetof
(
struct
ipv6hdr
,
payload_len
));
return
;
...
...
@@ -572,7 +572,7 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
return
;
err:
IP6_INC_STATS
(
Ip6
ReasmFails
);
IP6_INC_STATS
(
ReasmFails
);
kfree_skb
(
skb
);
}
...
...
@@ -666,7 +666,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in,
if
(
head
->
ip_summed
==
CHECKSUM_HW
)
head
->
csum
=
csum_partial
(
head
->
nh
.
raw
,
head
->
h
.
raw
-
head
->
nh
.
raw
,
head
->
csum
);
IP6_INC_STATS_BH
(
Ip6
ReasmOKs
);
IP6_INC_STATS_BH
(
ReasmOKs
);
fq
->
fragments
=
NULL
;
*
nhoffp
=
nhoff
;
return
1
;
...
...
@@ -679,7 +679,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in,
if
(
net_ratelimit
())
printk
(
KERN_DEBUG
"ip6_frag_reasm: no memory for reassembly
\n
"
);
out_fail:
IP6_INC_STATS_BH
(
Ip6
ReasmFails
);
IP6_INC_STATS_BH
(
ReasmFails
);
return
-
1
;
}
...
...
@@ -693,16 +693,16 @@ static int ipv6_frag_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
hdr
=
skb
->
nh
.
ipv6h
;
IP6_INC_STATS_BH
(
Ip6
ReasmReqds
);
IP6_INC_STATS_BH
(
ReasmReqds
);
/* Jumbo payload inhibits frag. header */
if
(
hdr
->
payload_len
==
0
)
{
IP6_INC_STATS
(
I
p6I
nHdrErrors
);
IP6_INC_STATS
(
InHdrErrors
);
icmpv6_param_prob
(
skb
,
ICMPV6_HDR_FIELD
,
skb
->
h
.
raw
-
skb
->
nh
.
raw
);
return
-
1
;
}
if
(
!
pskb_may_pull
(
skb
,
(
skb
->
h
.
raw
-
skb
->
data
)
+
sizeof
(
struct
frag_hdr
)))
{
IP6_INC_STATS
(
I
p6I
nHdrErrors
);
IP6_INC_STATS
(
InHdrErrors
);
icmpv6_param_prob
(
skb
,
ICMPV6_HDR_FIELD
,
skb
->
h
.
raw
-
skb
->
nh
.
raw
);
return
-
1
;
}
...
...
@@ -713,7 +713,7 @@ static int ipv6_frag_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
if
(
!
(
fhdr
->
frag_off
&
htons
(
0xFFF9
)))
{
/* It is not a fragmented frame */
skb
->
h
.
raw
+=
sizeof
(
struct
frag_hdr
);
IP6_INC_STATS_BH
(
Ip6
ReasmOKs
);
IP6_INC_STATS_BH
(
ReasmOKs
);
*
nhoffp
=
(
u8
*
)
fhdr
-
skb
->
nh
.
raw
;
return
1
;
...
...
@@ -738,7 +738,7 @@ static int ipv6_frag_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
return
ret
;
}
IP6_INC_STATS_BH
(
Ip6
ReasmFails
);
IP6_INC_STATS_BH
(
ReasmFails
);
kfree_skb
(
skb
);
return
-
1
;
}
...
...
net/ipv6/route.c
View file @
3626b045
...
...
@@ -83,6 +83,7 @@ static int ip6_rt_min_advmss = IPV6_MIN_MTU - 20 - 40;
static
struct
rt6_info
*
ip6_rt_copy
(
struct
rt6_info
*
ort
);
static
struct
dst_entry
*
ip6_dst_check
(
struct
dst_entry
*
dst
,
u32
cookie
);
static
struct
dst_entry
*
ip6_negative_advice
(
struct
dst_entry
*
);
static
void
ip6_dst_destroy
(
struct
dst_entry
*
);
static
int
ip6_dst_gc
(
void
);
static
int
ip6_pkt_discard
(
struct
sk_buff
*
skb
);
...
...
@@ -95,6 +96,7 @@ static struct dst_ops ip6_dst_ops = {
.
gc
=
ip6_dst_gc
,
.
gc_thresh
=
1024
,
.
check
=
ip6_dst_check
,
.
destroy
=
ip6_dst_destroy
,
.
negative_advice
=
ip6_negative_advice
,
.
link_failure
=
ip6_link_failure
,
.
update_pmtu
=
ip6_rt_update_pmtu
,
...
...
@@ -134,7 +136,15 @@ rwlock_t rt6_lock = RW_LOCK_UNLOCKED;
/* allocate dst with ip6_dst_ops */
static
__inline__
struct
rt6_info
*
ip6_dst_alloc
(
void
)
{
return
dst_alloc
(
&
ip6_dst_ops
);
return
(
struct
rt6_info
*
)
dst_alloc
(
&
ip6_dst_ops
);
}
static
void
ip6_dst_destroy
(
struct
dst_entry
*
dst
)
{
struct
rt6_info
*
rt
=
(
struct
rt6_info
*
)
dst
;
if
(
rt
->
rt6i_idev
!=
NULL
)
in6_dev_put
(
rt
->
rt6i_idev
);
}
/*
...
...
@@ -573,14 +583,14 @@ struct dst_entry *ndisc_dst_alloc(struct net_device *dev,
if
(
unlikely
(
rt
==
NULL
))
goto
out
;
if
(
dev
)
dev_hold
(
dev
);
dev_hold
(
dev
);
if
(
neigh
)
neigh_hold
(
neigh
);
else
neigh
=
ndisc_get_neigh
(
dev
,
addr
);
rt
->
rt6i_dev
=
dev
;
rt
->
rt6i_idev
=
in6_dev_get
(
dev
);
rt
->
rt6i_nexthop
=
neigh
;
rt
->
rt6i_expires
=
0
;
rt
->
rt6i_flags
=
RTF_LOCAL
;
...
...
@@ -714,6 +724,12 @@ int ip6_route_add(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh, void *_rtattr)
if
(
rtmsg
->
rtmsg_src_len
)
return
-
EINVAL
;
#endif
if
(
rtmsg
->
rtmsg_ifindex
)
{
dev
=
dev_get_by_index
(
rtmsg
->
rtmsg_ifindex
);
if
(
!
dev
)
return
-
ENODEV
;
}
if
(
rtmsg
->
rtmsg_metric
==
0
)
rtmsg
->
rtmsg_metric
=
IP6_RT_PRIO_USER
;
...
...
@@ -739,13 +755,6 @@ int ip6_route_add(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh, void *_rtattr)
rt
->
u
.
dst
.
output
=
ip6_output
;
if
(
rtmsg
->
rtmsg_ifindex
)
{
dev
=
dev_get_by_index
(
rtmsg
->
rtmsg_ifindex
);
err
=
-
ENODEV
;
if
(
dev
==
NULL
)
goto
out
;
}
ipv6_addr_prefix
(
&
rt
->
rt6i_dst
.
addr
,
&
rtmsg
->
rtmsg_dst
,
rtmsg
->
rtmsg_dst_len
);
rt
->
rt6i_dst
.
plen
=
rtmsg
->
rtmsg_dst_len
;
...
...
@@ -872,6 +881,7 @@ int ip6_route_add(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh, void *_rtattr)
if
(
!
rt
->
u
.
dst
.
metrics
[
RTAX_ADVMSS
-
1
])
rt
->
u
.
dst
.
metrics
[
RTAX_ADVMSS
-
1
]
=
ipv6_advmss
(
dst_pmtu
(
&
rt
->
u
.
dst
));
rt
->
u
.
dst
.
dev
=
dev
;
rt
->
rt6i_idev
=
in6_dev_get
(
dev
);
return
rt6_ins
(
rt
,
nlh
,
_rtattr
);
out:
...
...
@@ -1138,6 +1148,9 @@ static struct rt6_info * ip6_rt_copy(struct rt6_info *ort)
rt
->
u
.
dst
.
dev
=
ort
->
u
.
dst
.
dev
;
if
(
rt
->
u
.
dst
.
dev
)
dev_hold
(
rt
->
u
.
dst
.
dev
);
rt
->
rt6i_idev
=
ort
->
rt6i_idev
;
if
(
rt
->
rt6i_idev
)
in6_dev_hold
(
rt
->
rt6i_idev
);
rt
->
u
.
dst
.
lastuse
=
jiffies
;
rt
->
rt6i_expires
=
0
;
...
...
@@ -1259,7 +1272,7 @@ int ipv6_route_ioctl(unsigned int cmd, void __user *arg)
int
ip6_pkt_discard
(
struct
sk_buff
*
skb
)
{
IP6_INC_STATS
(
Ip6
OutNoRoutes
);
IP6_INC_STATS
(
OutNoRoutes
);
icmpv6_send
(
skb
,
ICMPV6_DEST_UNREACH
,
ICMPV6_NOROUTE
,
0
,
skb
->
dev
);
kfree_skb
(
skb
);
return
0
;
...
...
@@ -1282,6 +1295,7 @@ int ip6_rt_addr_add(struct in6_addr *addr, struct net_device *dev, int anycast)
rt
->
u
.
dst
.
input
=
ip6_input
;
rt
->
u
.
dst
.
output
=
ip6_output
;
rt
->
rt6i_dev
=
&
loopback_dev
;
rt
->
rt6i_idev
=
in6_dev_get
(
&
loopback_dev
);
rt
->
u
.
dst
.
metrics
[
RTAX_MTU
-
1
]
=
ipv6_get_mtu
(
rt
->
rt6i_dev
);
rt
->
u
.
dst
.
metrics
[
RTAX_ADVMSS
-
1
]
=
ipv6_advmss
(
dst_pmtu
(
&
rt
->
u
.
dst
));
rt
->
u
.
dst
.
metrics
[
RTAX_HOPLIMIT
-
1
]
=
ipv6_get_hoplimit
(
rt
->
rt6i_dev
);
...
...
net/sctp/output.c
View file @
3626b045
...
...
@@ -496,7 +496,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
return
err
;
no_route:
kfree_skb
(
nskb
);
IP_INC_STATS_BH
(
Ip
OutNoRoutes
);
IP_INC_STATS_BH
(
OutNoRoutes
);
/* FIXME: Returning the 'err' will effect all the associations
* associated with a socket, although only one of the paths of the
...
...
net/xfrm/xfrm_state.c
View file @
3626b045
...
...
@@ -231,7 +231,6 @@ static void __xfrm_state_delete(struct xfrm_state *x)
void
xfrm_state_delete
(
struct
xfrm_state
*
x
)
{
xfrm_state_delete_tunnel
(
x
);
spin_lock_bh
(
&
x
->
lock
);
__xfrm_state_delete
(
x
);
spin_unlock_bh
(
&
x
->
lock
);
...
...
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