Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
f24211e7
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f24211e7
编写于
2月 20, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
上级
cf535ea5
a8372f03
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
96 addition
and
47 deletion
+96
-47
drivers/net/irda/irda-usb.c
drivers/net/irda/irda-usb.c
+76
-14
drivers/net/irda/irda-usb.h
drivers/net/irda/irda-usb.h
+3
-4
net/core/skbuff.c
net/core/skbuff.c
+3
-7
net/ipv4/netfilter/ip_nat_core.c
net/ipv4/netfilter/ip_nat_core.c
+9
-9
net/ipv4/netfilter/ip_nat_standalone.c
net/ipv4/netfilter/ip_nat_standalone.c
+5
-11
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_policy.c
+0
-2
未找到文件。
drivers/net/irda/irda-usb.c
浏览文件 @
f24211e7
...
...
@@ -108,6 +108,7 @@ static void irda_usb_close(struct irda_usb_cb *self);
static
void
speed_bulk_callback
(
struct
urb
*
urb
,
struct
pt_regs
*
regs
);
static
void
write_bulk_callback
(
struct
urb
*
urb
,
struct
pt_regs
*
regs
);
static
void
irda_usb_receive
(
struct
urb
*
urb
,
struct
pt_regs
*
regs
);
static
void
irda_usb_rx_defer_expired
(
unsigned
long
data
);
static
int
irda_usb_net_open
(
struct
net_device
*
dev
);
static
int
irda_usb_net_close
(
struct
net_device
*
dev
);
static
int
irda_usb_net_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
);
...
...
@@ -677,6 +678,12 @@ static void irda_usb_net_timeout(struct net_device *netdev)
* on the interrupt pipe and hang the Rx URB only when an interrupt is
* received.
* Jean II
*
* Note : don't read the above as what we are currently doing, but as
* something we could do with KC dongle. Also don't forget that the
* interrupt pipe is not part of the original standard, so this would
* need to be optional...
* Jean II
*/
/*------------------------------------------------------------------*/
...
...
@@ -704,10 +711,8 @@ static void irda_usb_submit(struct irda_usb_cb *self, struct sk_buff *skb, struc
/* Reinitialize URB */
usb_fill_bulk_urb
(
urb
,
self
->
usbdev
,
usb_rcvbulkpipe
(
self
->
usbdev
,
self
->
bulk_in_ep
),
skb
->
data
,
skb
->
truesize
,
skb
->
data
,
IRDA_SKB_MAX_MTU
,
irda_usb_receive
,
skb
);
/* Note : unlink *must* be synchronous because of the code in
* irda_usb_net_close() -> free the skb - Jean II */
urb
->
status
=
0
;
/* Can be called from irda_usb_receive (irq handler) -> GFP_ATOMIC */
...
...
@@ -734,6 +739,7 @@ static void irda_usb_receive(struct urb *urb, struct pt_regs *regs)
struct
irda_skb_cb
*
cb
;
struct
sk_buff
*
newskb
;
struct
sk_buff
*
dataskb
;
struct
urb
*
next_urb
;
int
docopy
;
IRDA_DEBUG
(
2
,
"%s(), len=%d
\n
"
,
__FUNCTION__
,
urb
->
actual_length
);
...
...
@@ -755,20 +761,37 @@ static void irda_usb_receive(struct urb *urb, struct pt_regs *regs)
if
(
urb
->
status
!=
0
)
{
switch
(
urb
->
status
)
{
case
-
EILSEQ
:
self
->
stats
.
rx_errors
++
;
self
->
stats
.
rx_crc_errors
++
;
break
;
/* Also precursor to a hot-unplug on UHCI. */
/* Fallthrough... */
case
-
ECONNRESET
:
/* -104 */
IRDA_DEBUG
(
0
,
"%s(), Connection Reset (-104), transfer_flags 0x%04X
\n
"
,
__FUNCTION__
,
urb
->
transfer_flags
);
/* Random error, if I remember correctly */
/* uhci_cleanup_unlink() is going to kill the Rx
* URB just after we return. No problem, at this
* point the URB will be idle ;-) - Jean II */
break
;
case
-
ESHUTDOWN
:
/* -108 */
/* That's usually a hot-unplug. Submit will fail... */
case
-
ETIMEDOUT
:
/* -110 */
/* Usually precursor to a hot-unplug on OHCI. */
default:
IRDA_DEBUG
(
0
,
"%s(), RX status %d,transfer_flags 0x%04X
\n
"
,
__FUNCTION__
,
urb
->
status
,
urb
->
transfer_flags
);
self
->
stats
.
rx_errors
++
;
IRDA_DEBUG
(
0
,
"%s(), RX status %d, transfer_flags 0x%04X
\n
"
,
__FUNCTION__
,
urb
->
status
,
urb
->
transfer_flags
);
break
;
}
goto
done
;
/* If we received an error, we don't want to resubmit the
* Rx URB straight away but to give the USB layer a little
* bit of breathing room.
* We are in the USB thread context, therefore there is a
* danger of recursion (new URB we submit fails, we come
* back here).
* With recent USB stack (2.6.15+), I'm seeing that on
* hot unplug of the dongle...
* Lowest effective timer is 10ms...
* Jean II */
self
->
rx_defer_timer
.
function
=
&
irda_usb_rx_defer_expired
;
self
->
rx_defer_timer
.
data
=
(
unsigned
long
)
urb
;
mod_timer
(
&
self
->
rx_defer_timer
,
jiffies
+
(
10
*
HZ
/
1000
));
return
;
}
/* Check for empty frames */
...
...
@@ -845,13 +868,45 @@ static void irda_usb_receive(struct urb *urb, struct pt_regs *regs)
* idle slot....
* Jean II */
/* Note : with this scheme, we could submit the idle URB before
* processing the Rx URB. Another time... Jean II */
* processing the Rx URB. I don't think it would buy us anything as
* we are running in the USB thread context. Jean II */
next_urb
=
self
->
idle_rx_urb
;
/* Submit the idle URB to replace the URB we've just received */
irda_usb_submit
(
self
,
skb
,
self
->
idle_rx_urb
);
/* Recycle Rx URB : Now, the idle URB is the present one */
urb
->
context
=
NULL
;
self
->
idle_rx_urb
=
urb
;
/* Submit the idle URB to replace the URB we've just received.
* Do it last to avoid race conditions... Jean II */
irda_usb_submit
(
self
,
skb
,
next_urb
);
}
/*------------------------------------------------------------------*/
/*
* In case of errors, we want the USB layer to have time to recover.
* Now, it is time to resubmit ouur Rx URB...
*/
static
void
irda_usb_rx_defer_expired
(
unsigned
long
data
)
{
struct
urb
*
urb
=
(
struct
urb
*
)
data
;
struct
sk_buff
*
skb
=
(
struct
sk_buff
*
)
urb
->
context
;
struct
irda_usb_cb
*
self
;
struct
irda_skb_cb
*
cb
;
struct
urb
*
next_urb
;
IRDA_DEBUG
(
2
,
"%s()
\n
"
,
__FUNCTION__
);
/* Find ourselves */
cb
=
(
struct
irda_skb_cb
*
)
skb
->
cb
;
IRDA_ASSERT
(
cb
!=
NULL
,
return
;);
self
=
(
struct
irda_usb_cb
*
)
cb
->
context
;
IRDA_ASSERT
(
self
!=
NULL
,
return
;);
/* Same stuff as when Rx is done, see above... */
next_urb
=
self
->
idle_rx_urb
;
urb
->
context
=
NULL
;
self
->
idle_rx_urb
=
urb
;
irda_usb_submit
(
self
,
skb
,
next_urb
);
}
/*------------------------------------------------------------------*/
...
...
@@ -990,6 +1045,9 @@ static int irda_usb_net_close(struct net_device *netdev)
/* Stop network Tx queue */
netif_stop_queue
(
netdev
);
/* Kill defered Rx URB */
del_timer
(
&
self
->
rx_defer_timer
);
/* Deallocate all the Rx path buffers (URBs and skb) */
for
(
i
=
0
;
i
<
IU_MAX_RX_URBS
;
i
++
)
{
struct
urb
*
urb
=
self
->
rx_urb
[
i
];
...
...
@@ -1365,6 +1423,7 @@ static int irda_usb_probe(struct usb_interface *intf,
self
=
net
->
priv
;
self
->
netdev
=
net
;
spin_lock_init
(
&
self
->
lock
);
init_timer
(
&
self
->
rx_defer_timer
);
/* Create all of the needed urbs */
for
(
i
=
0
;
i
<
IU_MAX_RX_URBS
;
i
++
)
{
...
...
@@ -1498,6 +1557,9 @@ static void irda_usb_disconnect(struct usb_interface *intf)
* This will stop/desactivate the Tx path. - Jean II */
self
->
present
=
0
;
/* Kill defered Rx URB */
del_timer
(
&
self
->
rx_defer_timer
);
/* We need to have irq enabled to unlink the URBs. That's OK,
* at this point the Tx path is gone - Jean II */
spin_unlock_irqrestore
(
&
self
->
lock
,
flags
);
...
...
@@ -1507,11 +1569,11 @@ static void irda_usb_disconnect(struct usb_interface *intf)
/* Accept no more transmissions */
/*netif_device_detach(self->netdev);*/
netif_stop_queue
(
self
->
netdev
);
/* Stop all the receive URBs */
/* Stop all the receive URBs
. Must be synchronous.
*/
for
(
i
=
0
;
i
<
IU_MAX_RX_URBS
;
i
++
)
usb_kill_urb
(
self
->
rx_urb
[
i
]);
/* Cancel Tx and speed URB.
*
Toggle flags to make sure it's synchronou
s. */
*
Make sure it's synchronous to avoid race
s. */
usb_kill_urb
(
self
->
tx_urb
);
usb_kill_urb
(
self
->
speed_urb
);
}
...
...
drivers/net/irda/irda-usb.h
浏览文件 @
f24211e7
...
...
@@ -136,8 +136,6 @@ struct irda_usb_cb {
__u16
bulk_out_mtu
;
/* Max Tx packet size in bytes */
__u8
bulk_int_ep
;
/* Interrupt Endpoint assignments */
wait_queue_head_t
wait_q
;
/* for timeouts */
struct
urb
*
rx_urb
[
IU_MAX_RX_URBS
];
/* URBs used to receive data frames */
struct
urb
*
idle_rx_urb
;
/* Pointer to idle URB in Rx path */
struct
urb
*
tx_urb
;
/* URB used to send data frames */
...
...
@@ -147,17 +145,18 @@ struct irda_usb_cb {
struct
net_device_stats
stats
;
struct
irlap_cb
*
irlap
;
/* The link layer we are binded to */
struct
qos_info
qos
;
hashbin_t
*
tx_list
;
/* Queued transmit skb's */
char
*
speed_buff
;
/* Buffer for speed changes */
struct
timeval
stamp
;
struct
timeval
now
;
spinlock_t
lock
;
/* For serializing operations */
spinlock_t
lock
;
/* For serializing
Tx
operations */
__u16
xbofs
;
/* Current xbofs setting */
__s16
new_xbofs
;
/* xbofs we need to set */
__u32
speed
;
/* Current speed */
__s32
new_speed
;
/* speed we need to set */
struct
timer_list
rx_defer_timer
;
/* Wait for Rx error to clear */
};
net/core/skbuff.c
浏览文件 @
f24211e7
...
...
@@ -411,6 +411,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
C
(
pkt_type
);
C
(
ip_summed
);
C
(
priority
);
#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
C
(
ipvs_property
);
#endif
C
(
protocol
);
n
->
destructor
=
NULL
;
#ifdef CONFIG_NETFILTER
...
...
@@ -422,13 +425,6 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
C
(
nfct_reasm
);
nf_conntrack_get_reasm
(
skb
->
nfct_reasm
);
#endif
#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
C
(
ipvs_property
);
#endif
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
C
(
nfct_reasm
);
nf_conntrack_get_reasm
(
skb
->
nfct_reasm
);
#endif
#ifdef CONFIG_BRIDGE_NETFILTER
C
(
nf_bridge
);
nf_bridge_get
(
skb
->
nf_bridge
);
...
...
net/ipv4/netfilter/ip_nat_core.c
浏览文件 @
f24211e7
...
...
@@ -434,6 +434,7 @@ int ip_nat_icmp_reply_translation(struct sk_buff **pskb,
}
*
inside
;
struct
ip_conntrack_tuple
inner
,
target
;
int
hdrlen
=
(
*
pskb
)
->
nh
.
iph
->
ihl
*
4
;
unsigned
long
statusbit
;
if
(
!
skb_make_writable
(
pskb
,
hdrlen
+
sizeof
(
*
inside
)))
return
0
;
...
...
@@ -495,17 +496,16 @@ int ip_nat_icmp_reply_translation(struct sk_buff **pskb,
/* Change outer to look the reply to an incoming packet
* (proto 0 means don't invert per-proto part). */
if
(
manip
==
IP_NAT_MANIP_SRC
)
statusbit
=
IPS_SRC_NAT
;
else
statusbit
=
IPS_DST_NAT
;
/* Obviously, we need to NAT destination IP, but source IP
should be NAT'ed only if it is from a NAT'd host.
/* Invert if this is reply dir. */
if
(
dir
==
IP_CT_DIR_REPLY
)
statusbit
^=
IPS_NAT_MASK
;
Explanation: some people use NAT for anonymizing. Also,
CERT recommends dropping all packets from private IP
addresses (although ICMP errors from internal links with
such addresses are not too uncommon, as Alan Cox points
out) */
if
(
manip
!=
IP_NAT_MANIP_SRC
||
((
*
pskb
)
->
nh
.
iph
->
saddr
==
ct
->
tuplehash
[
dir
].
tuple
.
src
.
ip
))
{
if
(
ct
->
status
&
statusbit
)
{
invert_tuplepr
(
&
target
,
&
ct
->
tuplehash
[
!
dir
].
tuple
);
if
(
!
manip_pkt
(
0
,
pskb
,
0
,
&
target
,
manip
))
return
0
;
...
...
net/ipv4/netfilter/ip_nat_standalone.c
浏览文件 @
f24211e7
...
...
@@ -200,21 +200,15 @@ ip_nat_in(unsigned int hooknum,
const
struct
net_device
*
out
,
int
(
*
okfn
)(
struct
sk_buff
*
))
{
struct
ip_conntrack
*
ct
;
enum
ip_conntrack_info
ctinfo
;
unsigned
int
ret
;
u_int32_t
daddr
=
(
*
pskb
)
->
nh
.
iph
->
daddr
;
ret
=
ip_nat_fn
(
hooknum
,
pskb
,
in
,
out
,
okfn
);
if
(
ret
!=
NF_DROP
&&
ret
!=
NF_STOLEN
&&
(
ct
=
ip_conntrack_get
(
*
pskb
,
&
ctinfo
))
!=
NULL
)
{
enum
ip_conntrack_dir
dir
=
CTINFO2DIR
(
ctinfo
);
if
(
ct
->
tuplehash
[
dir
].
tuple
.
dst
.
ip
!=
ct
->
tuplehash
[
!
dir
].
tuple
.
src
.
ip
)
{
&&
daddr
!=
(
*
pskb
)
->
nh
.
iph
->
daddr
)
{
dst_release
((
*
pskb
)
->
dst
);
(
*
pskb
)
->
dst
=
NULL
;
}
}
return
ret
;
}
...
...
@@ -276,7 +270,7 @@ ip_nat_local_fn(unsigned int hooknum,
ct
->
tuplehash
[
!
dir
].
tuple
.
src
.
ip
#ifdef CONFIG_XFRM
||
ct
->
tuplehash
[
dir
].
tuple
.
dst
.
u
.
all
!=
ct
->
tuplehash
[
dir
].
tuple
.
src
.
u
.
all
ct
->
tuplehash
[
!
dir
].
tuple
.
src
.
u
.
all
#endif
)
return
ip_route_me_harder
(
pskb
)
==
0
?
ret
:
NF_DROP
;
...
...
net/xfrm/xfrm_policy.c
浏览文件 @
f24211e7
...
...
@@ -885,8 +885,6 @@ int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl,
* We can't enlist stable bundles either.
*/
write_unlock_bh
(
&
policy
->
lock
);
xfrm_pol_put
(
policy
);
if
(
dst
)
dst_free
(
dst
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录