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
5403c8a2
Commit
5403c8a2
authored
Jan 31, 2011
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
parents
c79b9e49
c4c93106
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
131 additions
and
63 deletions
+131
-63
drivers/net/bnx2x/bnx2x.h
drivers/net/bnx2x/bnx2x.h
+2
-2
drivers/net/bnx2x/bnx2x_link.c
drivers/net/bnx2x/bnx2x_link.c
+18
-47
drivers/net/bnx2x/bnx2x_main.c
drivers/net/bnx2x/bnx2x_main.c
+11
-7
drivers/net/can/Kconfig
drivers/net/can/Kconfig
+1
-1
include/linux/Kbuild
include/linux/Kbuild
+1
-0
include/linux/caif/Kbuild
include/linux/caif/Kbuild
+2
-0
include/linux/mroute.h
include/linux/mroute.h
+1
-0
include/net/sock.h
include/net/sock.h
+2
-0
net/batman-adv/vis.c
net/batman-adv/vis.c
+8
-6
net/core/dev.c
net/core/dev.c
+1
-0
net/core/rtnetlink.c
net/core/rtnetlink.c
+3
-0
net/ipv4/af_inet.c
net/ipv4/af_inet.c
+16
-0
net/ipv4/ipmr.c
net/ipv4/ipmr.c
+46
-0
net/ipv4/raw.c
net/ipv4/raw.c
+19
-0
No files found.
drivers/net/bnx2x/bnx2x.h
View file @
5403c8a2
...
@@ -22,8 +22,8 @@
...
@@ -22,8 +22,8 @@
* (you will need to reboot afterwards) */
* (you will need to reboot afterwards) */
/* #define BNX2X_STOP_ON_ERROR */
/* #define BNX2X_STOP_ON_ERROR */
#define DRV_MODULE_VERSION "1.62.00-
4
"
#define DRV_MODULE_VERSION "1.62.00-
5
"
#define DRV_MODULE_RELDATE "2011/01/
18
"
#define DRV_MODULE_RELDATE "2011/01/
30
"
#define BNX2X_BC_VER 0x040200
#define BNX2X_BC_VER 0x040200
#define BNX2X_MULTI_QUEUE
#define BNX2X_MULTI_QUEUE
...
...
drivers/net/bnx2x/bnx2x_link.c
View file @
5403c8a2
...
@@ -3948,48 +3948,6 @@ static u8 bnx2x_8073_8727_external_rom_boot(struct bnx2x *bp,
...
@@ -3948,48 +3948,6 @@ static u8 bnx2x_8073_8727_external_rom_boot(struct bnx2x *bp,
return
rc
;
return
rc
;
}
}
static
void
bnx2x_8073_set_xaui_low_power_mode
(
struct
bnx2x
*
bp
,
struct
bnx2x_phy
*
phy
)
{
u16
val
;
bnx2x_cl45_read
(
bp
,
phy
,
MDIO_PMA_DEVAD
,
MDIO_PMA_REG_8073_CHIP_REV
,
&
val
);
if
(
val
==
0
)
{
/* Mustn't set low power mode in 8073 A0 */
return
;
}
/* Disable PLL sequencer (use read-modify-write to clear bit 13) */
bnx2x_cl45_read
(
bp
,
phy
,
MDIO_XS_DEVAD
,
MDIO_XS_PLL_SEQUENCER
,
&
val
);
val
&=
~
(
1
<<
13
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
MDIO_XS_PLL_SEQUENCER
,
val
);
/* PLL controls */
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x805E
,
0x1077
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x805D
,
0x0000
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x805C
,
0x030B
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x805B
,
0x1240
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x805A
,
0x2490
);
/* Tx Controls */
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x80A7
,
0x0C74
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x80A6
,
0x9041
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x80A5
,
0x4640
);
/* Rx Controls */
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x80FE
,
0x01C4
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x80FD
,
0x9249
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
0x80FC
,
0x2015
);
/* Enable PLL sequencer (use read-modify-write to set bit 13) */
bnx2x_cl45_read
(
bp
,
phy
,
MDIO_XS_DEVAD
,
MDIO_XS_PLL_SEQUENCER
,
&
val
);
val
|=
(
1
<<
13
);
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_XS_DEVAD
,
MDIO_XS_PLL_SEQUENCER
,
val
);
}
/******************************************************************/
/******************************************************************/
/* BCM8073 PHY SECTION */
/* BCM8073 PHY SECTION */
/******************************************************************/
/******************************************************************/
...
@@ -4148,8 +4106,6 @@ static u8 bnx2x_8073_config_init(struct bnx2x_phy *phy,
...
@@ -4148,8 +4106,6 @@ static u8 bnx2x_8073_config_init(struct bnx2x_phy *phy,
bnx2x_8073_set_pause_cl37
(
params
,
phy
,
vars
);
bnx2x_8073_set_pause_cl37
(
params
,
phy
,
vars
);
bnx2x_8073_set_xaui_low_power_mode
(
bp
,
phy
);
bnx2x_cl45_read
(
bp
,
phy
,
bnx2x_cl45_read
(
bp
,
phy
,
MDIO_PMA_DEVAD
,
MDIO_PMA_REG_M8051_MSGOUT_REG
,
&
tmp1
);
MDIO_PMA_DEVAD
,
MDIO_PMA_REG_M8051_MSGOUT_REG
,
&
tmp1
);
...
@@ -6519,6 +6475,18 @@ static void bnx2x_848xx_set_link_led(struct bnx2x_phy *phy,
...
@@ -6519,6 +6475,18 @@ static void bnx2x_848xx_set_link_led(struct bnx2x_phy *phy,
MDIO_PMA_DEVAD
,
MDIO_PMA_DEVAD
,
MDIO_PMA_REG_8481_LED1_MASK
,
MDIO_PMA_REG_8481_LED1_MASK
,
0x80
);
0x80
);
/* Tell LED3 to blink on source */
bnx2x_cl45_read
(
bp
,
phy
,
MDIO_PMA_DEVAD
,
MDIO_PMA_REG_8481_LINK_SIGNAL
,
&
val
);
val
&=
~
(
7
<<
6
);
val
|=
(
1
<<
6
);
/* A83B[8:6]= 1 */
bnx2x_cl45_write
(
bp
,
phy
,
MDIO_PMA_DEVAD
,
MDIO_PMA_REG_8481_LINK_SIGNAL
,
val
);
}
}
break
;
break
;
}
}
...
@@ -7720,10 +7688,13 @@ static u8 bnx2x_8073_common_init_phy(struct bnx2x *bp,
...
@@ -7720,10 +7688,13 @@ static u8 bnx2x_8073_common_init_phy(struct bnx2x *bp,
struct
bnx2x_phy
phy
[
PORT_MAX
];
struct
bnx2x_phy
phy
[
PORT_MAX
];
struct
bnx2x_phy
*
phy_blk
[
PORT_MAX
];
struct
bnx2x_phy
*
phy_blk
[
PORT_MAX
];
u16
val
;
u16
val
;
s8
port
;
s8
port
=
0
;
s8
port_of_path
=
0
;
s8
port_of_path
=
0
;
u32
swap_val
,
swap_override
;
bnx2x_ext_phy_hw_reset
(
bp
,
0
);
swap_val
=
REG_RD
(
bp
,
NIG_REG_PORT_SWAP
);
swap_override
=
REG_RD
(
bp
,
NIG_REG_STRAP_OVERRIDE
);
port
^=
(
swap_val
&&
swap_override
);
bnx2x_ext_phy_hw_reset
(
bp
,
port
);
/* PART1 - Reset both phys */
/* PART1 - Reset both phys */
for
(
port
=
PORT_MAX
-
1
;
port
>=
PORT_0
;
port
--
)
{
for
(
port
=
PORT_MAX
-
1
;
port
>=
PORT_0
;
port
--
)
{
u32
shmem_base
,
shmem2_base
;
u32
shmem_base
,
shmem2_base
;
...
...
drivers/net/bnx2x/bnx2x_main.c
View file @
5403c8a2
...
@@ -5296,10 +5296,6 @@ static int bnx2x_init_hw_common(struct bnx2x *bp, u32 load_code)
...
@@ -5296,10 +5296,6 @@ static int bnx2x_init_hw_common(struct bnx2x *bp, u32 load_code)
}
}
}
}
bp
->
port
.
need_hw_lock
=
bnx2x_hw_lock_required
(
bp
,
bp
->
common
.
shmem_base
,
bp
->
common
.
shmem2_base
);
bnx2x_setup_fan_failure_detection
(
bp
);
bnx2x_setup_fan_failure_detection
(
bp
);
/* clear PXP2 attentions */
/* clear PXP2 attentions */
...
@@ -5503,9 +5499,6 @@ static int bnx2x_init_hw_port(struct bnx2x *bp)
...
@@ -5503,9 +5499,6 @@ static int bnx2x_init_hw_port(struct bnx2x *bp)
bnx2x_init_block
(
bp
,
MCP_BLOCK
,
init_stage
);
bnx2x_init_block
(
bp
,
MCP_BLOCK
,
init_stage
);
bnx2x_init_block
(
bp
,
DMAE_BLOCK
,
init_stage
);
bnx2x_init_block
(
bp
,
DMAE_BLOCK
,
init_stage
);
bp
->
port
.
need_hw_lock
=
bnx2x_hw_lock_required
(
bp
,
bp
->
common
.
shmem_base
,
bp
->
common
.
shmem2_base
);
if
(
bnx2x_fan_failure_det_req
(
bp
,
bp
->
common
.
shmem_base
,
if
(
bnx2x_fan_failure_det_req
(
bp
,
bp
->
common
.
shmem_base
,
bp
->
common
.
shmem2_base
,
port
))
{
bp
->
common
.
shmem2_base
,
port
))
{
u32
reg_addr
=
(
port
?
MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0
:
u32
reg_addr
=
(
port
?
MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0
:
...
@@ -8379,6 +8372,17 @@ static void __devinit bnx2x_get_port_hwinfo(struct bnx2x *bp)
...
@@ -8379,6 +8372,17 @@ static void __devinit bnx2x_get_port_hwinfo(struct bnx2x *bp)
(
ext_phy_type
!=
PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN
))
(
ext_phy_type
!=
PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN
))
bp
->
mdio
.
prtad
=
bp
->
mdio
.
prtad
=
XGXS_EXT_PHY_ADDR
(
ext_phy_config
);
XGXS_EXT_PHY_ADDR
(
ext_phy_config
);
/*
* Check if hw lock is required to access MDC/MDIO bus to the PHY(s)
* In MF mode, it is set to cover self test cases
*/
if
(
IS_MF
(
bp
))
bp
->
port
.
need_hw_lock
=
1
;
else
bp
->
port
.
need_hw_lock
=
bnx2x_hw_lock_required
(
bp
,
bp
->
common
.
shmem_base
,
bp
->
common
.
shmem2_base
);
}
}
static
void
__devinit
bnx2x_get_mac_hwinfo
(
struct
bnx2x
*
bp
)
static
void
__devinit
bnx2x_get_mac_hwinfo
(
struct
bnx2x
*
bp
)
...
...
drivers/net/can/Kconfig
View file @
5403c8a2
...
@@ -23,7 +23,7 @@ config CAN_SLCAN
...
@@ -23,7 +23,7 @@ config CAN_SLCAN
As only the sending and receiving of CAN frames is implemented, this
As only the sending and receiving of CAN frames is implemented, this
driver should work with the (serial/USB) CAN hardware from:
driver should work with the (serial/USB) CAN hardware from:
www.canusb.com / www.can232.com / www.mictronic
.com
/ www.canhack.de
www.canusb.com / www.can232.com / www.mictronic
s.de
/ www.canhack.de
Userspace tools to attach the SLCAN line discipline (slcan_attach,
Userspace tools to attach the SLCAN line discipline (slcan_attach,
slcand) can be found in the can-utils at the SocketCAN SVN, see
slcand) can be found in the can-utils at the SocketCAN SVN, see
...
...
include/linux/Kbuild
View file @
5403c8a2
header-y += byteorder/
header-y += byteorder/
header-y += can/
header-y += can/
header-y += caif/
header-y += dvb/
header-y += dvb/
header-y += hdlc/
header-y += hdlc/
header-y += isdn/
header-y += isdn/
...
...
include/linux/caif/Kbuild
0 → 100644
View file @
5403c8a2
header-y += caif_socket.h
header-y += if_caif.h
include/linux/mroute.h
View file @
5403c8a2
...
@@ -150,6 +150,7 @@ static inline int ip_mroute_opt(int opt)
...
@@ -150,6 +150,7 @@ static inline int ip_mroute_opt(int opt)
extern
int
ip_mroute_setsockopt
(
struct
sock
*
,
int
,
char
__user
*
,
unsigned
int
);
extern
int
ip_mroute_setsockopt
(
struct
sock
*
,
int
,
char
__user
*
,
unsigned
int
);
extern
int
ip_mroute_getsockopt
(
struct
sock
*
,
int
,
char
__user
*
,
int
__user
*
);
extern
int
ip_mroute_getsockopt
(
struct
sock
*
,
int
,
char
__user
*
,
int
__user
*
);
extern
int
ipmr_ioctl
(
struct
sock
*
sk
,
int
cmd
,
void
__user
*
arg
);
extern
int
ipmr_ioctl
(
struct
sock
*
sk
,
int
cmd
,
void
__user
*
arg
);
extern
int
ipmr_compat_ioctl
(
struct
sock
*
sk
,
unsigned
int
cmd
,
void
__user
*
arg
);
extern
int
ip_mr_init
(
void
);
extern
int
ip_mr_init
(
void
);
#else
#else
static
inline
static
inline
...
...
include/net/sock.h
View file @
5403c8a2
...
@@ -753,6 +753,8 @@ struct proto {
...
@@ -753,6 +753,8 @@ struct proto {
int
level
,
int
level
,
int
optname
,
char
__user
*
optval
,
int
optname
,
char
__user
*
optval
,
int
__user
*
option
);
int
__user
*
option
);
int
(
*
compat_ioctl
)(
struct
sock
*
sk
,
unsigned
int
cmd
,
unsigned
long
arg
);
#endif
#endif
int
(
*
sendmsg
)(
struct
kiocb
*
iocb
,
struct
sock
*
sk
,
int
(
*
sendmsg
)(
struct
kiocb
*
iocb
,
struct
sock
*
sk
,
struct
msghdr
*
msg
,
size_t
len
);
struct
msghdr
*
msg
,
size_t
len
);
...
...
net/batman-adv/vis.c
View file @
5403c8a2
...
@@ -64,6 +64,7 @@ static void free_info(struct kref *ref)
...
@@ -64,6 +64,7 @@ static void free_info(struct kref *ref)
spin_unlock_bh
(
&
bat_priv
->
vis_list_lock
);
spin_unlock_bh
(
&
bat_priv
->
vis_list_lock
);
kfree_skb
(
info
->
skb_packet
);
kfree_skb
(
info
->
skb_packet
);
kfree
(
info
);
}
}
/* Compare two vis packets, used by the hashing algorithm */
/* Compare two vis packets, used by the hashing algorithm */
...
@@ -268,10 +269,10 @@ int vis_seq_print_text(struct seq_file *seq, void *offset)
...
@@ -268,10 +269,10 @@ int vis_seq_print_text(struct seq_file *seq, void *offset)
buff_pos
+=
sprintf
(
buff
+
buff_pos
,
"%pM,"
,
buff_pos
+=
sprintf
(
buff
+
buff_pos
,
"%pM,"
,
entry
->
addr
);
entry
->
addr
);
for
(
i
=
0
;
i
<
packet
->
entries
;
i
++
)
for
(
j
=
0
;
j
<
packet
->
entries
;
j
++
)
buff_pos
+=
vis_data_read_entry
(
buff_pos
+=
vis_data_read_entry
(
buff
+
buff_pos
,
buff
+
buff_pos
,
&
entries
[
i
],
&
entries
[
j
],
entry
->
addr
,
entry
->
addr
,
entry
->
primary
);
entry
->
primary
);
...
@@ -444,7 +445,7 @@ static struct vis_info *add_packet(struct bat_priv *bat_priv,
...
@@ -444,7 +445,7 @@ static struct vis_info *add_packet(struct bat_priv *bat_priv,
info
);
info
);
if
(
hash_added
<
0
)
{
if
(
hash_added
<
0
)
{
/* did not work (for some reason) */
/* did not work (for some reason) */
kref_put
(
&
old_
info
->
refcount
,
free_info
);
kref_put
(
&
info
->
refcount
,
free_info
);
info
=
NULL
;
info
=
NULL
;
}
}
...
@@ -815,7 +816,7 @@ static void send_vis_packets(struct work_struct *work)
...
@@ -815,7 +816,7 @@ static void send_vis_packets(struct work_struct *work)
container_of
(
work
,
struct
delayed_work
,
work
);
container_of
(
work
,
struct
delayed_work
,
work
);
struct
bat_priv
*
bat_priv
=
struct
bat_priv
*
bat_priv
=
container_of
(
delayed_work
,
struct
bat_priv
,
vis_work
);
container_of
(
delayed_work
,
struct
bat_priv
,
vis_work
);
struct
vis_info
*
info
,
*
temp
;
struct
vis_info
*
info
;
spin_lock_bh
(
&
bat_priv
->
vis_hash_lock
);
spin_lock_bh
(
&
bat_priv
->
vis_hash_lock
);
purge_vis_packets
(
bat_priv
);
purge_vis_packets
(
bat_priv
);
...
@@ -825,8 +826,9 @@ static void send_vis_packets(struct work_struct *work)
...
@@ -825,8 +826,9 @@ static void send_vis_packets(struct work_struct *work)
send_list_add
(
bat_priv
,
bat_priv
->
my_vis_info
);
send_list_add
(
bat_priv
,
bat_priv
->
my_vis_info
);
}
}
list_for_each_entry_safe
(
info
,
temp
,
&
bat_priv
->
vis_send_list
,
while
(
!
list_empty
(
&
bat_priv
->
vis_send_list
))
{
send_list
)
{
info
=
list_first_entry
(
&
bat_priv
->
vis_send_list
,
typeof
(
*
info
),
send_list
);
kref_get
(
&
info
->
refcount
);
kref_get
(
&
info
->
refcount
);
spin_unlock_bh
(
&
bat_priv
->
vis_hash_lock
);
spin_unlock_bh
(
&
bat_priv
->
vis_hash_lock
);
...
...
net/core/dev.c
View file @
5403c8a2
...
@@ -3564,6 +3564,7 @@ static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)
...
@@ -3564,6 +3564,7 @@ static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)
__skb_pull
(
skb
,
skb_headlen
(
skb
));
__skb_pull
(
skb
,
skb_headlen
(
skb
));
skb_reserve
(
skb
,
NET_IP_ALIGN
-
skb_headroom
(
skb
));
skb_reserve
(
skb
,
NET_IP_ALIGN
-
skb_headroom
(
skb
));
skb
->
vlan_tci
=
0
;
skb
->
vlan_tci
=
0
;
skb
->
dev
=
napi
->
dev
;
napi
->
skb
=
skb
;
napi
->
skb
=
skb
;
}
}
...
...
net/core/rtnetlink.c
View file @
5403c8a2
...
@@ -1704,6 +1704,9 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
...
@@ -1704,6 +1704,9 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
snprintf
(
ifname
,
IFNAMSIZ
,
"%s%%d"
,
ops
->
kind
);
snprintf
(
ifname
,
IFNAMSIZ
,
"%s%%d"
,
ops
->
kind
);
dest_net
=
rtnl_link_get_net
(
net
,
tb
);
dest_net
=
rtnl_link_get_net
(
net
,
tb
);
if
(
IS_ERR
(
dest_net
))
return
PTR_ERR
(
dest_net
);
dev
=
rtnl_create_link
(
net
,
dest_net
,
ifname
,
ops
,
tb
);
dev
=
rtnl_create_link
(
net
,
dest_net
,
ifname
,
ops
,
tb
);
if
(
IS_ERR
(
dev
))
if
(
IS_ERR
(
dev
))
...
...
net/ipv4/af_inet.c
View file @
5403c8a2
...
@@ -880,6 +880,19 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
...
@@ -880,6 +880,19 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
}
}
EXPORT_SYMBOL
(
inet_ioctl
);
EXPORT_SYMBOL
(
inet_ioctl
);
#ifdef CONFIG_COMPAT
int
inet_compat_ioctl
(
struct
socket
*
sock
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
sock
*
sk
=
sock
->
sk
;
int
err
=
-
ENOIOCTLCMD
;
if
(
sk
->
sk_prot
->
compat_ioctl
)
err
=
sk
->
sk_prot
->
compat_ioctl
(
sk
,
cmd
,
arg
);
return
err
;
}
#endif
const
struct
proto_ops
inet_stream_ops
=
{
const
struct
proto_ops
inet_stream_ops
=
{
.
family
=
PF_INET
,
.
family
=
PF_INET
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
...
@@ -903,6 +916,7 @@ const struct proto_ops inet_stream_ops = {
...
@@ -903,6 +916,7 @@ const struct proto_ops inet_stream_ops = {
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT
.
compat_setsockopt
=
compat_sock_common_setsockopt
,
.
compat_setsockopt
=
compat_sock_common_setsockopt
,
.
compat_getsockopt
=
compat_sock_common_getsockopt
,
.
compat_getsockopt
=
compat_sock_common_getsockopt
,
.
compat_ioctl
=
inet_compat_ioctl
,
#endif
#endif
};
};
EXPORT_SYMBOL
(
inet_stream_ops
);
EXPORT_SYMBOL
(
inet_stream_ops
);
...
@@ -929,6 +943,7 @@ const struct proto_ops inet_dgram_ops = {
...
@@ -929,6 +943,7 @@ const struct proto_ops inet_dgram_ops = {
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT
.
compat_setsockopt
=
compat_sock_common_setsockopt
,
.
compat_setsockopt
=
compat_sock_common_setsockopt
,
.
compat_getsockopt
=
compat_sock_common_getsockopt
,
.
compat_getsockopt
=
compat_sock_common_getsockopt
,
.
compat_ioctl
=
inet_compat_ioctl
,
#endif
#endif
};
};
EXPORT_SYMBOL
(
inet_dgram_ops
);
EXPORT_SYMBOL
(
inet_dgram_ops
);
...
@@ -959,6 +974,7 @@ static const struct proto_ops inet_sockraw_ops = {
...
@@ -959,6 +974,7 @@ static const struct proto_ops inet_sockraw_ops = {
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT
.
compat_setsockopt
=
compat_sock_common_setsockopt
,
.
compat_setsockopt
=
compat_sock_common_setsockopt
,
.
compat_getsockopt
=
compat_sock_common_getsockopt
,
.
compat_getsockopt
=
compat_sock_common_getsockopt
,
.
compat_ioctl
=
inet_compat_ioctl
,
#endif
#endif
};
};
...
...
net/ipv4/ipmr.c
View file @
5403c8a2
...
@@ -60,6 +60,7 @@
...
@@ -60,6 +60,7 @@
#include <linux/notifier.h>
#include <linux/notifier.h>
#include <linux/if_arp.h>
#include <linux/if_arp.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter_ipv4.h>
#include <linux/compat.h>
#include <net/ipip.h>
#include <net/ipip.h>
#include <net/checksum.h>
#include <net/checksum.h>
#include <net/netlink.h>
#include <net/netlink.h>
...
@@ -1434,6 +1435,51 @@ int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg)
...
@@ -1434,6 +1435,51 @@ int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg)
}
}
}
}
#ifdef CONFIG_COMPAT
struct
compat_sioc_sg_req
{
struct
in_addr
src
;
struct
in_addr
grp
;
compat_ulong_t
pktcnt
;
compat_ulong_t
bytecnt
;
compat_ulong_t
wrong_if
;
};
int
ipmr_compat_ioctl
(
struct
sock
*
sk
,
unsigned
int
cmd
,
void
__user
*
arg
)
{
struct
sioc_sg_req
sr
;
struct
mfc_cache
*
c
;
struct
net
*
net
=
sock_net
(
sk
);
struct
mr_table
*
mrt
;
mrt
=
ipmr_get_table
(
net
,
raw_sk
(
sk
)
->
ipmr_table
?
:
RT_TABLE_DEFAULT
);
if
(
mrt
==
NULL
)
return
-
ENOENT
;
switch
(
cmd
)
{
case
SIOCGETSGCNT
:
if
(
copy_from_user
(
&
sr
,
arg
,
sizeof
(
sr
)))
return
-
EFAULT
;
rcu_read_lock
();
c
=
ipmr_cache_find
(
mrt
,
sr
.
src
.
s_addr
,
sr
.
grp
.
s_addr
);
if
(
c
)
{
sr
.
pktcnt
=
c
->
mfc_un
.
res
.
pkt
;
sr
.
bytecnt
=
c
->
mfc_un
.
res
.
bytes
;
sr
.
wrong_if
=
c
->
mfc_un
.
res
.
wrong_if
;
rcu_read_unlock
();
if
(
copy_to_user
(
arg
,
&
sr
,
sizeof
(
sr
)))
return
-
EFAULT
;
return
0
;
}
rcu_read_unlock
();
return
-
EADDRNOTAVAIL
;
default:
return
-
ENOIOCTLCMD
;
}
}
#endif
static
int
ipmr_device_event
(
struct
notifier_block
*
this
,
unsigned
long
event
,
void
*
ptr
)
static
int
ipmr_device_event
(
struct
notifier_block
*
this
,
unsigned
long
event
,
void
*
ptr
)
{
{
...
...
net/ipv4/raw.c
View file @
5403c8a2
...
@@ -76,6 +76,7 @@
...
@@ -76,6 +76,7 @@
#include <linux/seq_file.h>
#include <linux/seq_file.h>
#include <linux/netfilter.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter_ipv4.h>
#include <linux/compat.h>
static
struct
raw_hashinfo
raw_v4_hashinfo
=
{
static
struct
raw_hashinfo
raw_v4_hashinfo
=
{
.
lock
=
__RW_LOCK_UNLOCKED
(
raw_v4_hashinfo
.
lock
),
.
lock
=
__RW_LOCK_UNLOCKED
(
raw_v4_hashinfo
.
lock
),
...
@@ -838,6 +839,23 @@ static int raw_ioctl(struct sock *sk, int cmd, unsigned long arg)
...
@@ -838,6 +839,23 @@ static int raw_ioctl(struct sock *sk, int cmd, unsigned long arg)
}
}
}
}
#ifdef CONFIG_COMPAT
static
int
compat_raw_ioctl
(
struct
sock
*
sk
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
switch
(
cmd
)
{
case
SIOCOUTQ
:
case
SIOCINQ
:
return
-
ENOIOCTLCMD
;
default:
#ifdef CONFIG_IP_MROUTE
return
ipmr_compat_ioctl
(
sk
,
cmd
,
compat_ptr
(
arg
));
#else
return
-
ENOIOCTLCMD
;
#endif
}
}
#endif
struct
proto
raw_prot
=
{
struct
proto
raw_prot
=
{
.
name
=
"RAW"
,
.
name
=
"RAW"
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
...
@@ -860,6 +878,7 @@ struct proto raw_prot = {
...
@@ -860,6 +878,7 @@ struct proto raw_prot = {
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT
.
compat_setsockopt
=
compat_raw_setsockopt
,
.
compat_setsockopt
=
compat_raw_setsockopt
,
.
compat_getsockopt
=
compat_raw_getsockopt
,
.
compat_getsockopt
=
compat_raw_getsockopt
,
.
compat_ioctl
=
compat_raw_ioctl
,
#endif
#endif
};
};
...
...
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