Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
osv
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Verlässliche Systemsoftware
projects
osv
Commits
9e73f02c
Commit
9e73f02c
authored
11 years ago
by
Avi Kivity
Browse files
Options
Downloads
Patches
Plain Diff
sys_socket.c: convert to C++
Signed-off-by:
Avi Kivity
<
avi@cloudius-systems.com
>
parent
6338e1d3
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
bsd/sys/kern/sys_socket.cc
+38
-37
38 additions, 37 deletions
bsd/sys/kern/sys_socket.cc
bsd/sys/net/route.h
+4
-0
4 additions, 0 deletions
bsd/sys/net/route.h
with
42 additions
and
37 deletions
bsd/sys/kern/sys_socket.c
→
bsd/sys/kern/sys_socket.c
c
+
38
−
37
View file @
9e73f02c
...
@@ -37,6 +37,7 @@
...
@@ -37,6 +37,7 @@
#include
<osv/types.h>
#include
<osv/types.h>
#include
<osv/ioctl.h>
#include
<osv/ioctl.h>
#include
<fs/unsupported.h>
#include
<fs/unsupported.h>
#include
<osv/initialize.hh>
#include
<bsd/sys/sys/libkern.h>
#include
<bsd/sys/sys/libkern.h>
#include
<bsd/sys/sys/param.h>
#include
<bsd/sys/sys/param.h>
...
@@ -47,12 +48,12 @@
...
@@ -47,12 +48,12 @@
#include
<bsd/sys/net/route.h>
#include
<bsd/sys/net/route.h>
#include
<bsd/sys/net/vnet.h>
#include
<bsd/sys/net/vnet.h>
extern
int
linux_ioctl_socket
(
struct
file
*
fp
,
u_long
cmd
,
void
*
data
)
;
extern
"C"
int
linux_ioctl_socket
(
struct
file
*
fp
,
u_long
cmd
,
void
*
data
)
;
int
int
soo_init
(
struct
file
*
fp
)
soo_init
(
struct
file
*
fp
)
{
{
struct
socket
*
so
=
file_data
(
fp
);
struct
socket
*
so
=
(
socket
*
)
file_data
(
fp
);
so
->
fp
=
fp
;
so
->
fp
=
fp
;
return
0
;
return
0
;
...
@@ -62,7 +63,7 @@ soo_init(struct file *fp)
...
@@ -62,7 +63,7 @@ soo_init(struct file *fp)
int
int
soo_read
(
struct
file
*
fp
,
struct
uio
*
uio
,
int
flags
)
soo_read
(
struct
file
*
fp
,
struct
uio
*
uio
,
int
flags
)
{
{
struct
socket
*
so
=
file_data
(
fp
);
struct
socket
*
so
=
(
socket
*
)
file_data
(
fp
);
int
error
;
int
error
;
error
=
soreceive
(
so
,
0
,
uio
,
0
,
0
,
0
);
error
=
soreceive
(
so
,
0
,
uio
,
0
,
0
,
0
);
...
@@ -73,7 +74,7 @@ soo_read(struct file *fp, struct uio *uio, int flags)
...
@@ -73,7 +74,7 @@ soo_read(struct file *fp, struct uio *uio, int flags)
int
int
soo_write
(
struct
file
*
fp
,
struct
uio
*
uio
,
int
flags
)
soo_write
(
struct
file
*
fp
,
struct
uio
*
uio
,
int
flags
)
{
{
struct
socket
*
so
=
file_data
(
fp
);
struct
socket
*
so
=
(
socket
*
)
file_data
(
fp
);
int
error
;
int
error
;
error
=
sosend
(
so
,
0
,
uio
,
0
,
0
,
0
,
0
);
error
=
sosend
(
so
,
0
,
uio
,
0
,
0
,
0
,
0
);
...
@@ -98,32 +99,31 @@ soo_truncate(struct file *fp, off_t length)
...
@@ -98,32 +99,31 @@ soo_truncate(struct file *fp, off_t length)
#define LINUX_IOCTL_IDX(ioctl) ((ioctl) - SIOCBEGIN)
#define LINUX_IOCTL_IDX(ioctl) ((ioctl) - SIOCBEGIN)
#define LINUX_IOCTL_TYPE(ioctl) (linux_ioctl_type_tbl[LINUX_IOCTL_IDX(ioctl)])
#define LINUX_IOCTL_TYPE(ioctl) (linux_ioctl_type_tbl[LINUX_IOCTL_IDX(ioctl)])
static
char
linux_ioctl_type_tbl
[
256
]
=
{
static
std
::
array
<
char
,
256
>
linux_ioctl_type_tbl
=
initialize_array
<
char
,
256
>
({
[
LINUX_IOCTL_IDX
(
SIOCGIFCONF
)]
=
'i'
,
/* get iface list */
{
LINUX_IOCTL_IDX
(
SIOCGIFCONF
)
,
'i'
,
/* get iface list */
},
[
LINUX_IOCTL_IDX
(
SIOCGIFFLAGS
)]
=
'i'
,
/* get flags */
{
LINUX_IOCTL_IDX
(
SIOCGIFFLAGS
)
,
'i'
,
/* get flags */
},
[
LINUX_IOCTL_IDX
(
SIOCSIFFLAGS
)]
=
'i'
,
/* set flags */
{
LINUX_IOCTL_IDX
(
SIOCSIFFLAGS
)
,
'i'
,
/* set flags */
},
[
LINUX_IOCTL_IDX
(
SIOCGIFADDR
)]
=
'i'
,
/* get PA address */
{
LINUX_IOCTL_IDX
(
SIOCGIFADDR
)
,
'i'
,
/* get PA address */
},
[
LINUX_IOCTL_IDX
(
SIOCSIFADDR
)]
=
'i'
,
/* set PA address */
{
LINUX_IOCTL_IDX
(
SIOCSIFADDR
)
,
'i'
,
/* set PA address */
},
[
LINUX_IOCTL_IDX
(
SIOCGIFDSTADDR
)]
=
'i'
,
/* get remote PA address */
{
LINUX_IOCTL_IDX
(
SIOCGIFDSTADDR
)
,
'i'
,
/* get remote PA address */
},
[
LINUX_IOCTL_IDX
(
SIOCSIFDSTADDR
)]
=
'i'
,
/* set remote PA address */
{
LINUX_IOCTL_IDX
(
SIOCSIFDSTADDR
)
,
'i'
,
/* set remote PA address */
},
[
LINUX_IOCTL_IDX
(
SIOCGIFBRDADDR
)]
=
'i'
,
/* get broadcast PA address */
{
LINUX_IOCTL_IDX
(
SIOCGIFBRDADDR
)
,
'i'
,
/* get broadcast PA address */
},
[
LINUX_IOCTL_IDX
(
SIOCSIFBRDADDR
)]
=
'i'
,
/* set broadcast PA address */
{
LINUX_IOCTL_IDX
(
SIOCSIFBRDADDR
)
,
'i'
,
/* set broadcast PA address */
},
[
LINUX_IOCTL_IDX
(
SIOCGIFNETMASK
)]
=
'i'
,
/* get network PA mask */
{
LINUX_IOCTL_IDX
(
SIOCGIFNETMASK
)
,
'i'
,
/* get network PA mask */
},
[
LINUX_IOCTL_IDX
(
SIOCSIFNETMASK
)]
=
'i'
,
/* set network PA mask */
{
LINUX_IOCTL_IDX
(
SIOCSIFNETMASK
)
,
'i'
,
/* set network PA mask */
},
[
LINUX_IOCTL_IDX
(
SIOCGIFMETRIC
)]
=
'i'
,
/* get metric */
{
LINUX_IOCTL_IDX
(
SIOCGIFMETRIC
)
,
'i'
,
/* get metric */
},
[
LINUX_IOCTL_IDX
(
SIOCSIFMETRIC
)]
=
'i'
,
/* set metric */
{
LINUX_IOCTL_IDX
(
SIOCSIFMETRIC
)
,
'i'
,
/* set metric */
},
[
LINUX_IOCTL_IDX
(
SIOCGIFMTU
)]
=
'i'
,
/* get MTU size */
{
LINUX_IOCTL_IDX
(
SIOCGIFMTU
)
,
'i'
,
/* get MTU size */
},
[
LINUX_IOCTL_IDX
(
SIOCSIFMTU
)]
=
'i'
,
/* set MTU size */
{
LINUX_IOCTL_IDX
(
SIOCSIFMTU
)
,
'i'
,
/* set MTU size */
},
[
LINUX_IOCTL_IDX
(
SIOCSIFNAME
)]
=
'i'
,
/* set interface name */
{
LINUX_IOCTL_IDX
(
SIOCSIFNAME
)
,
'i'
,
/* set interface name */
},
[
LINUX_IOCTL_IDX
(
SIOCGIFHWADDR
)]
=
'i'
,
/* set hardware address */
{
LINUX_IOCTL_IDX
(
SIOCGIFHWADDR
)
,
'i'
,
/* set hardware address */
},
[
LINUX_IOCTL_IDX
(
SIOCADDMULTI
)]
=
'i'
,
/* Multicast address lists */
{
LINUX_IOCTL_IDX
(
SIOCADDMULTI
)
,
'i'
,
/* Multicast address lists */
},
[
LINUX_IOCTL_IDX
(
SIOCDELMULTI
)]
=
'i'
,
{
LINUX_IOCTL_IDX
(
SIOCDELMULTI
)
,
'i'
,
},
[
LINUX_IOCTL_IDX
(
SIOCGIFINDEX
)]
=
'i'
,
/* name -> if_index mapping */
{
LINUX_IOCTL_IDX
(
SIOCGIFINDEX
)
,
'i'
,
/* name -> if_index mapping */
},
[
LINUX_IOCTL_IDX
(
SIOCDIFADDR
)]
=
'i'
,
/* delete PA address */
{
LINUX_IOCTL_IDX
(
SIOCDIFADDR
)
,
'i'
,
/* delete PA address */
},
[
LINUX_IOCTL_IDX
(
SIOCGIFBR
)]
=
'i'
,
/* Bridging support */
{
LINUX_IOCTL_IDX
(
SIOCGIFBR
)
,
'i'
,
/* Bridging support */
},
[
LINUX_IOCTL_IDX
(
SIOCSIFBR
)]
=
'i'
,
/* Set bridging options */
{
LINUX_IOCTL_IDX
(
SIOCSIFBR
)
,
'i'
,
/* Set bridging options */
},
}
;
});
static
char
get_ioctl_type
(
int
ioctl
)
static
char
get_ioctl_type
(
int
ioctl
)
{
{
...
@@ -133,10 +133,11 @@ static char get_ioctl_type(int ioctl)
...
@@ -133,10 +133,11 @@ static char get_ioctl_type(int ioctl)
return
_IOC_TYPE
(
ioctl
)
;
return
_IOC_TYPE
(
ioctl
)
;
}
}
extern
"C"
int
int
soo_ioctl
(
struct
file
*
fp
,
u_long
cmd
,
void
*
data
)
soo_ioctl
(
struct
file
*
fp
,
u_long
cmd
,
void
*
data
)
{
{
struct
socket
*
so
=
file_data
(
fp
);
struct
socket
*
so
=
(
socket
*
)
file_data
(
fp
);
int
error
=
0
;
int
error
=
0
;
char
ioctl_type
;
char
ioctl_type
;
...
@@ -210,17 +211,17 @@ soo_ioctl(struct file *fp, u_long cmd, void *data)
...
@@ -210,17 +211,17 @@ soo_ioctl(struct file *fp, u_long cmd, void *data)
*/
*/
ioctl_type
=
get_ioctl_type
(
cmd
)
;
ioctl_type
=
get_ioctl_type
(
cmd
)
;
if
(
ioctl_type
==
'i'
)
if
(
ioctl_type
==
'i'
)
error
=
ifioctl
(
so
,
cmd
,
data
,
0
);
error
=
ifioctl
(
so
,
cmd
,
(
caddr_t
)
data
,
0
);
else
if
(
ioctl_type
==
'r'
)
{
else
if
(
ioctl_type
==
'r'
)
{
CURVNET_SET
(
so
->
so_vnet
);
CURVNET_SET
(
so
->
so_vnet
);
error
=
rtioctl_fib
(
cmd
,
data
,
so
->
so_fibnum
);
error
=
rtioctl_fib
(
cmd
,
(
caddr_t
)
data
,
so
->
so_fibnum
);
CURVNET_RESTORE
();
CURVNET_RESTORE
();
}
else
if
(
ioctl_type
==
'\0'
)
{
}
else
if
(
ioctl_type
==
'\0'
)
{
error
=
ENOTTY
;
/* An unsupported Linux ioctl */
error
=
ENOTTY
;
/* An unsupported Linux ioctl */
}
else
{
}
else
{
CURVNET_SET
(
so
->
so_vnet
);
CURVNET_SET
(
so
->
so_vnet
);
error
=
((
*
so
->
so_proto
->
pr_usrreqs
->
pru_control
)
error
=
((
*
so
->
so_proto
->
pr_usrreqs
->
pru_control
)
(
so
,
cmd
,
data
,
0
,
0
));
(
so
,
cmd
,
(
caddr_t
)
data
,
0
,
0
));
CURVNET_RESTORE
();
CURVNET_RESTORE
();
}
}
break
;
break
;
...
@@ -231,14 +232,14 @@ soo_ioctl(struct file *fp, u_long cmd, void *data)
...
@@ -231,14 +232,14 @@ soo_ioctl(struct file *fp, u_long cmd, void *data)
int
int
soo_poll
(
struct
file
*
fp
,
int
events
)
soo_poll
(
struct
file
*
fp
,
int
events
)
{
{
struct
socket
*
so
=
file_data
(
fp
);
struct
socket
*
so
=
(
socket
*
)
file_data
(
fp
);
return
(
sopoll
(
so
,
events
,
0
,
0
));
return
(
sopoll
(
so
,
events
,
0
,
0
));
}
}
int
int
soo_stat
(
struct
file
*
fp
,
struct
stat
*
ub
)
soo_stat
(
struct
file
*
fp
,
struct
stat
*
ub
)
{
{
struct
socket
*
so
=
file_data
(
fp
);
struct
socket
*
so
=
(
socket
*
)
file_data
(
fp
);
bzero
((
caddr_t
)
ub
,
sizeof
(
*
ub
));
bzero
((
caddr_t
)
ub
,
sizeof
(
*
ub
));
ub
->
st_mode
=
S_IFSOCK
;
ub
->
st_mode
=
S_IFSOCK
;
...
@@ -273,7 +274,7 @@ soo_close(struct file *fp)
...
@@ -273,7 +274,7 @@ soo_close(struct file *fp)
int
error
=
0
;
int
error
=
0
;
struct
socket
*
so
;
struct
socket
*
so
;
so
=
file_data
(
fp
);
so
=
(
socket
*
)
file_data
(
fp
);
if
(
so
)
if
(
so
)
error
=
soclose
(
so
);
error
=
soclose
(
so
);
...
...
This diff is collapsed.
Click to expand it.
bsd/sys/net/route.h
+
4
−
0
View file @
9e73f02c
...
@@ -417,6 +417,8 @@ int rtrequest(int, struct bsd_sockaddr *,
...
@@ -417,6 +417,8 @@ int rtrequest(int, struct bsd_sockaddr *,
int
rtinit_fib
(
struct
bsd_ifaddr
*
,
int
,
int
);
int
rtinit_fib
(
struct
bsd_ifaddr
*
,
int
,
int
);
#endif
#endif
__BEGIN_DECLS
/* XXX MRT NEW VERSIONS THAT USE FIBs
/* XXX MRT NEW VERSIONS THAT USE FIBs
* For now the protocol indepedent versions are the same as the AF_INET ones
* For now the protocol indepedent versions are the same as the AF_INET ones
* but this will change..
* but this will change..
...
@@ -432,6 +434,8 @@ int rtrequest_fib(int, struct bsd_sockaddr *,
...
@@ -432,6 +434,8 @@ int rtrequest_fib(int, struct bsd_sockaddr *,
struct
bsd_sockaddr
*
,
struct
bsd_sockaddr
*
,
int
,
struct
rtentry
**
,
u_int
);
struct
bsd_sockaddr
*
,
struct
bsd_sockaddr
*
,
int
,
struct
rtentry
**
,
u_int
);
int
rtrequest1_fib
(
int
,
struct
rt_addrinfo
*
,
struct
rtentry
**
,
u_int
);
int
rtrequest1_fib
(
int
,
struct
rt_addrinfo
*
,
struct
rtentry
**
,
u_int
);
__END_DECLS
#include
<bsd/sys/sys/eventhandler.h>
#include
<bsd/sys/sys/eventhandler.h>
typedef
void
(
*
rtevent_arp_update_fn
)(
void
*
,
struct
rtentry
*
,
uint8_t
*
,
struct
bsd_sockaddr
*
);
typedef
void
(
*
rtevent_arp_update_fn
)(
void
*
,
struct
rtentry
*
,
uint8_t
*
,
struct
bsd_sockaddr
*
);
typedef
void
(
*
rtevent_redirect_fn
)(
void
*
,
struct
rtentry
*
,
struct
rtentry
*
,
struct
bsd_sockaddr
*
);
typedef
void
(
*
rtevent_redirect_fn
)(
void
*
,
struct
rtentry
*
,
struct
rtentry
*
,
struct
bsd_sockaddr
*
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment