Skip to content
Snippets Groups Projects
Commit 9e73f02c authored by Avi Kivity's avatar Avi Kivity
Browse files

sys_socket.c: convert to C++

parent 6338e1d3
No related branches found
No related tags found
No related merge requests found
...@@ -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);
......
...@@ -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 *);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment