Ver código fonte

[Pal] Purge all multicast/broadcast functionality

Multicast and broadcast functionality was added to Linux and Linux-SGX
PALs in hope that LibOS would use it for distributed consensus. This
never happened, and multicast/broadcast is not used currently.
Dmitrii Kuvaiskii 4 anos atrás
pai
commit
2c6ff2718f

+ 0 - 2
Documentation/oldwiki/PAL-Host-ABI.md

@@ -120,8 +120,6 @@ The fields of the Graphene control block are defined as follows:
         PAL_HANDLE first_thread;
         /* debug stream */
         PAL_HANDLE debug_stream;
-        /* broadcast RPC stream */
-        PAL_HANDLE broadcast_stream;
 
         /***** Memory layout ******/
         /* The range of user address */

+ 1 - 22
Pal/regression/Process.c

@@ -4,7 +4,7 @@
 
 int main(int argc, char** argv, char** envp) {
     char buffer1[20] = "Hello World 1", buffer2[20] = "Hello World 2";
-    char buffer3[20], buffer4[20], buffer5[20];
+    char buffer3[20], buffer4[20];
     int ret;
 
     if (argc > 1 && !memcmp(argv[1], "Child", 6)) {
@@ -23,16 +23,6 @@ int main(int argc, char** argv, char** envp) {
 
         DkStreamWrite(pal_control.parent_process, 0, 20, buffer1, NULL);
 
-        if (pal_control.broadcast_stream == NULL) {
-            pal_printf(
-                "Warning: broadcast stream is not open. "
-                "Do you have a multicast route configured?\n");
-        } else {
-            ret = DkStreamRead(pal_control.broadcast_stream, 0, 20, buffer5, NULL, 0);
-            if (ret > 0)
-                pal_printf("Broadcast Read: %s\n", buffer5);
-        }
-
         ret = DkStreamWrite(pal_control.parent_process, 0, 20, buffer1, NULL);
         if (ret > 0)
             pal_printf("Process Write 1 OK\n");
@@ -56,17 +46,6 @@ int main(int argc, char** argv, char** envp) {
             }
         }
 
-        pal_printf("Broadcasting message\n");
-        if (pal_control.broadcast_stream == NULL) {
-            pal_printf(
-                "Warning: broadcast stream is not open. "
-                "Do you have a multicast route configured?\n");
-        } else {
-            ret = DkStreamWrite(pal_control.broadcast_stream, 0, 20, buffer1, NULL);
-            if (ret > 0)
-                pal_printf("Broadcast Write OK\n");
-        }
-
         for (int i = 0; i < 3; i++)
             if (children[i]) {
                 ret = DkStreamRead(children[i], 0, 20, buffer3, NULL, 0);

+ 0 - 13
Pal/regression/test_pal.py

@@ -524,19 +524,6 @@ class TC_21_ProcessCreation(RegressionTestCase):
         self.assertEqual(counter['Process Write 2 OK'], 3)
         self.assertEqual(counter['Process Read 2: Hello World 2'], 3)
 
-    def test_110_process_broadcast(self):
-        stdout, stderr = self.run_binary(['Process'], timeout=8)
-        counter = collections.Counter(stderr.split('\n'))
-
-        # Multi-Process Broadcast Channel Transmission
-        if ('Warning: broadcast stream is not open. '
-                'Do you have a multicast route configured?') in stderr:
-            self.skipTest('Could not open broadcast stream. '
-                'Do you have a multicast route configured?')
-
-        self.assertEqual(counter['Broadcast Write OK'], 1)
-        self.assertEqual(counter['Broadcast Read: Hello World 1'], 3)
-
     def test_200_process2(self):
         # Process Creation with a Different Binary
         stdout, stderr = self.run_binary(['Process2'])

+ 0 - 1
Pal/src/db_main.c

@@ -443,7 +443,6 @@ noreturn void pal_main (
                                     &__pal_control.user_address_hole.end);
 
     __pal_control.alloc_align        = pal_state.alloc_align;
-    __pal_control.broadcast_stream   = _DkBroadcastStreamOpen();
 
     if (_DkGetCPUInfo(&__pal_control.cpu_info) < 0) {
         goto out_fail;

+ 0 - 38
Pal/src/db_misc.c

@@ -32,44 +32,6 @@ PAL_NUM DkSystemTimeQuery(void) {
     return time;
 }
 
-static PAL_LOCK lock = LOCK_INIT;
-static unsigned long seed;
-
-size_t _DkFastRandomBitsRead(void* buffer, size_t size) {
-    unsigned long rand;
-    size_t bytes = 0;
-
-    _DkInternalLock(&lock);
-    rand = seed;
-    while (!seed) {
-        _DkInternalUnlock(&lock);
-        int ret = _DkRandomBitsRead(&rand, sizeof(rand));
-        if (ret < 0)
-            return ret;
-        _DkInternalLock(&lock);
-        seed = rand;
-    }
-
-    do {
-        if (bytes + sizeof(rand) <= size) {
-            *(unsigned long*)((char*)buffer + bytes) = rand;
-            bytes += sizeof(rand);
-        } else {
-            for (size_t i = 0; i < size - bytes; i++)
-                *(unsigned char*)((char*)buffer + bytes + i) = ((unsigned char*)&rand)[i];
-            bytes = size;
-        }
-        do {
-            rand = hash64(rand);
-        } while (!rand);
-    } while (bytes < size);
-
-    seed = rand;
-    _DkInternalUnlock(&lock);
-
-    return bytes;
-}
-
 PAL_NUM DkRandomBitsRead(PAL_PTR buffer, PAL_NUM size) {
     ENTER_PAL_CALL(DkRandomBitsRead);
 

+ 0 - 2
Pal/src/db_streams.c

@@ -43,7 +43,6 @@ extern struct handle_ops thread_ops;
 extern struct handle_ops proc_ops;
 extern struct handle_ops mutex_ops;
 extern struct handle_ops event_ops;
-extern struct handle_ops mcast_ops;
 extern struct handle_ops eventfd_ops;
 
 const struct handle_ops* pal_handle_ops[PAL_HANDLE_TYPE_BOUND] = {
@@ -59,7 +58,6 @@ const struct handle_ops* pal_handle_ops[PAL_HANDLE_TYPE_BOUND] = {
     [pal_type_udp]     = &udp_ops,
     [pal_type_udpsrv]  = &udpsrv_ops,
     [pal_type_process] = &proc_ops,
-    [pal_type_mcast]   = &mcast_ops,
     [pal_type_thread]  = &thread_ops,
     [pal_type_mutex]   = &mutex_ops,
     [pal_type_event]   = &event_ops,

+ 0 - 3
Pal/src/host/Linux-SGX/db_main.c

@@ -267,9 +267,6 @@ void pal_linux_main(char * uptr_args, uint64_t args_size,
 
     COPY_ARRAY(pal_sec.pipe_prefix, sec_info.pipe_prefix);
     pal_sec.aesm_targetinfo = sec_info.aesm_targetinfo;
-    pal_sec.mcast_port = sec_info.mcast_port;
-    pal_sec.mcast_srv = sec_info.mcast_srv;
-    pal_sec.mcast_cli = sec_info.mcast_cli;
 #ifdef DEBUG
     pal_sec.in_gdb = sec_info.in_gdb;
 #endif

+ 0 - 99
Pal/src/host/Linux-SGX/db_sockets.c

@@ -1007,102 +1007,3 @@ struct handle_ops udpsrv_ops = {
     .attrquerybyhdl = &socket_attrquerybyhdl,
     .attrsetbyhdl   = &socket_attrsetbyhdl,
 };
-
-PAL_HANDLE _DkBroadcastStreamOpen(void) {
-    PAL_HANDLE hdl = malloc(HANDLE_SIZE(file));
-    SET_HANDLE_TYPE(hdl, mcast);
-    HANDLE_HDR(hdl)->flags |= RFD(0) | WFD(1);
-    hdl->mcast.port = pal_sec.mcast_port;
-    hdl->mcast.srv  = pal_sec.mcast_srv;
-    hdl->mcast.cli  = pal_sec.mcast_cli;
-    return hdl;
-}
-
-static int64_t mcast_send(PAL_HANDLE handle, uint64_t offset, uint64_t size, const void* buf) {
-    if (offset)
-        return -PAL_ERROR_INVAL;
-
-    if (handle->mcast.srv == PAL_IDX_POISON)
-        return -PAL_ERROR_BADHANDLE;
-
-    if (size >= (1ULL << (sizeof(unsigned int) * 8)))
-        return -PAL_ERROR_INVAL;
-
-    int bytes = ocall_send(handle->mcast.srv, buf, size, NULL, 0, NULL, 0);
-    if (IS_ERR(bytes))
-        return unix_to_pal_error(ERRNO(bytes));
-
-    return bytes;
-}
-
-static int64_t mcast_receive(PAL_HANDLE handle, uint64_t offset, uint64_t size, void* buf) {
-    if (offset)
-        return -PAL_ERROR_INVAL;
-
-    if (handle->mcast.cli == PAL_IDX_POISON)
-        return -PAL_ERROR_BADHANDLE;
-
-    if (size >= (1ULL << (sizeof(unsigned int) * 8)))
-        return -PAL_ERROR_INVAL;
-
-    int bytes = ocall_recv(handle->mcast.cli, buf, size, NULL, NULL, NULL, NULL);
-    if (IS_ERR(bytes))
-        return unix_to_pal_error(ERRNO(bytes));
-
-    return bytes;
-}
-
-static int mcast_close(PAL_HANDLE handle) {
-    if (handle->mcast.srv != PAL_IDX_POISON) {
-        ocall_close(handle->mcast.srv);
-        handle->mcast.srv = PAL_IDX_POISON;
-    }
-    if (handle->mcast.cli != PAL_IDX_POISON) {
-        ocall_close(handle->mcast.cli);
-        handle->mcast.cli = PAL_IDX_POISON;
-    }
-    return 0;
-}
-
-static int mcast_attrquerybyhdl(PAL_HANDLE handle, PAL_STREAM_ATTR* attr) {
-    if (handle->mcast.cli == PAL_IDX_POISON)
-        return -PAL_ERROR_BADHANDLE;
-
-    int ret = ocall_fionread(handle->mcast.cli);
-    if (IS_ERR(ret))
-        return unix_to_pal_error(ERRNO(ret));
-
-    memset(attr, 0, sizeof(PAL_STREAM_ATTR));
-    attr->pending_size = ret;
-    attr->disconnected = HANDLE_HDR(handle)->flags & (ERROR(0) | ERROR(1));
-    attr->readable     = (attr->pending_size > 0);
-    attr->writable     = PAL_TRUE;
-    attr->nonblocking  = handle->mcast.nonblocking;
-    return 0;
-}
-
-static int mcast_attrsetbyhdl(PAL_HANDLE handle, PAL_STREAM_ATTR* attr) {
-    if (handle->mcast.cli == PAL_IDX_POISON)
-        return -PAL_ERROR_BADHANDLE;
-
-    PAL_BOL* nonblocking = &handle->mcast.nonblocking;
-
-    if (attr->nonblocking != *nonblocking) {
-        int ret = ocall_fsetnonblock(handle->mcast.cli, *nonblocking);
-
-        if (IS_ERR(ret))
-            return unix_to_pal_error(ERRNO(ret));
-
-        *nonblocking = attr->nonblocking;
-    }
-
-    return 0;
-}
-
-struct handle_ops mcast_ops = {
-    .write          = &mcast_send,
-    .read           = &mcast_receive,
-    .close          = &mcast_close,
-    .attrquerybyhdl = &mcast_attrquerybyhdl,
-    .attrsetbyhdl   = &mcast_attrsetbyhdl,
-};

+ 0 - 7
Pal/src/host/Linux-SGX/pal_host.h

@@ -152,13 +152,6 @@ typedef struct pal_handle
             PAL_SESSION_KEY session_key;
         } process;
 
-        struct {
-            PAL_IDX cli;
-            PAL_IDX srv;
-            PAL_IDX port;
-            PAL_BOL nonblocking;
-        } mcast;
-
         struct pal_handle_thread thread;
 
         struct {

+ 0 - 3
Pal/src/host/Linux-SGX/pal_security.h

@@ -49,7 +49,6 @@ struct pal_sec {
 
     /* additional information */
     PAL_SEC_STR     pipe_prefix;
-    PAL_IDX         mcast_port, mcast_srv, mcast_cli;
 
     /* Need to pass in the number of cores */
     PAL_NUM         num_cpus;
@@ -72,6 +71,4 @@ extern struct pal_sec pal_sec;
 
 #define PROC_INIT_FD    255
 
-#define MCAST_GROUP "239.0.0.1"
-
 #endif /* PAL_SECURITY_H */

+ 0 - 14
Pal/src/host/Linux-SGX/sgx_enclave.c

@@ -426,11 +426,6 @@ static int sgx_ocall_recv(void * pms)
     struct sockaddr * addr = ms->ms_addr;
     socklen_t addrlen = ms->ms_addr ? ms->ms_addrlen : 0;
 
-    if (ms->ms_sockfd == pal_enclave.pal_sec.mcast_srv) {
-        addr = NULL;
-        addrlen = 0;
-    }
-
     struct msghdr hdr;
     struct iovec iov[1];
 
@@ -466,15 +461,6 @@ static int sgx_ocall_send(void * pms)
     ODEBUG(OCALL_SEND, ms);
     const struct sockaddr * addr = ms->ms_addr;
     socklen_t addrlen = ms->ms_addr ? ms->ms_addrlen : 0;
-    struct sockaddr_in mcast_addr;
-
-    if (ms->ms_sockfd == pal_enclave.pal_sec.mcast_srv) {
-        mcast_addr.sin_family = AF_INET;
-        inet_pton4(MCAST_GROUP, sizeof(MCAST_GROUP),  &mcast_addr.sin_addr.s_addr);
-        mcast_addr.sin_port = htons(pal_enclave.pal_sec.mcast_port);
-        addr = (struct sockaddr *) &mcast_addr;
-        addrlen = sizeof(struct sockaddr_in);
-    }
 
     struct msghdr hdr;
     struct iovec iov[1];

+ 0 - 78
Pal/src/host/Linux-SGX/sgx_main.c

@@ -595,68 +595,6 @@ out:
     return ret;
 }
 
-static int mcast_s (int port)
-{
-    struct sockaddr_in addr;
-    int ret = 0;
-    addr.sin_family = AF_INET;
-    addr.sin_addr.s_addr = INADDR_ANY;
-    addr.sin_port = htons(port);
-
-    int fd = INLINE_SYSCALL(socket, 3, AF_INET, SOCK_DGRAM, 0);
-
-    if (IS_ERR(fd))
-        return -ERRNO(fd);
-
-    ret = INLINE_SYSCALL(setsockopt, 5, fd, IPPROTO_IP, IP_MULTICAST_IF,
-                         &addr.sin_addr.s_addr, sizeof(addr.sin_addr.s_addr));
-    if (IS_ERR(ret))
-        return -ERRNO(ret);
-
-    return fd;
-}
-
-static int mcast_c (int port)
-{
-    int ret = 0, fd;
-
-    struct sockaddr_in addr;
-    addr.sin_family = AF_INET;
-    addr.sin_addr.s_addr = INADDR_ANY;
-    addr.sin_port = htons(port);
-
-    fd = INLINE_SYSCALL(socket, 3, AF_INET, SOCK_DGRAM, 0);
-    if (IS_ERR(fd))
-        return -ERRNO(fd);
-
-    int reuse = 1;
-    INLINE_SYSCALL(setsockopt, 5, fd, SOL_SOCKET, SO_REUSEADDR,
-                   &reuse, sizeof(reuse));
-
-    ret = INLINE_SYSCALL(bind, 3, fd, &addr, sizeof(addr));
-    if (IS_ERR(ret))
-        return -ERRNO(ret);
-
-    ret = INLINE_SYSCALL(setsockopt, 5, fd, IPPROTO_IP, IP_MULTICAST_IF,
-                         &addr.sin_addr.s_addr, sizeof(addr.sin_addr.s_addr));
-    if (IS_ERR(ret))
-        return -ERRNO(ret);
-
-    inet_pton4(MCAST_GROUP, sizeof(MCAST_GROUP) - 1,
-               &addr.sin_addr.s_addr);
-
-    struct ip_mreq group;
-    group.imr_multiaddr.s_addr = addr.sin_addr.s_addr;
-    group.imr_interface.s_addr = INADDR_ANY;
-
-    ret = INLINE_SYSCALL(setsockopt, 5, fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
-                         &group, sizeof(group));
-    if (IS_ERR(ret))
-        return -ERRNO(ret);
-
-    return fd;
-}
-
 static unsigned long randval = 0;
 
 void getrand (void * buffer, size_t size)
@@ -936,22 +874,6 @@ static int load_enclave (struct pal_enclave * enclave,
         memcpy(pal_sec->exec_name, exec_uri, strlen(exec_uri) + 1);
     }
 
-    if (!pal_sec->mcast_port) {
-        unsigned short mcast_port;
-        getrand(&mcast_port, sizeof(unsigned short));
-        pal_sec->mcast_port = mcast_port > 1024 ? mcast_port : mcast_port + 1024;
-    }
-
-    if ((ret = mcast_s(pal_sec->mcast_port)) >= 0) {
-        pal_sec->mcast_srv = ret;
-        if ((ret = mcast_c(pal_sec->mcast_port)) >= 0) {
-            pal_sec->mcast_cli = ret;
-        } else {
-            INLINE_SYSCALL(close, 1, pal_sec->mcast_srv);
-            pal_sec->mcast_srv = 0;
-        }
-    }
-
     ret = sgx_signal_setup();
     if (ret < 0)
         return ret;

+ 0 - 3
Pal/src/host/Linux-SGX/sgx_process.c

@@ -44,7 +44,6 @@ struct proc_args {
     int             stream_fd;
     int             cargo_fd;
     PAL_SEC_STR     pipe_prefix;
-    unsigned int    mcast_port;
 };
 
 /*
@@ -131,7 +130,6 @@ int sgx_create_process(const char* uri, int nargs, const char** args, int* strea
     proc_args.stream_fd         = fds[0];
     proc_args.cargo_fd          = fds[2];
     memcpy(proc_args.pipe_prefix, pal_sec->pipe_prefix, sizeof(PAL_SEC_STR));
-    proc_args.mcast_port = pal_sec->mcast_port;
 
     ret = INLINE_SYSCALL(write, 3, fds[1], &proc_args, sizeof(struct proc_args));
     if (IS_ERR(ret) || (size_t)ret < sizeof(struct proc_args)) {
@@ -191,7 +189,6 @@ int sgx_init_child_process (struct pal_sec * pal_sec)
     pal_sec->stream_fd     = proc_args.stream_fd;
     pal_sec->cargo_fd      = proc_args.cargo_fd;
     memcpy(pal_sec->pipe_prefix, proc_args.pipe_prefix, sizeof(PAL_SEC_STR));
-    pal_sec->mcast_port  = proc_args.mcast_port;
 
     return 1;
 }

+ 0 - 179
Pal/src/host/Linux/db_sockets.c

@@ -1206,182 +1206,3 @@ struct handle_ops udpsrv_ops = {
     .attrquerybyhdl = &socket_attrquerybyhdl,
     .attrsetbyhdl   = &socket_attrsetbyhdl,
 };
-
-PAL_HANDLE _DkBroadcastStreamOpen(void) {
-    if (!pal_sec.mcast_port) {
-        unsigned short mcast_port;
-        _DkFastRandomBitsRead(&mcast_port, sizeof(unsigned short));
-        pal_sec.mcast_port = mcast_port > 1024 ? mcast_port : mcast_port + 1024;
-    }
-
-    struct sockaddr_in addr;
-    int ret              = 0;
-    addr.sin_family      = AF_INET;
-    addr.sin_addr.s_addr = INADDR_ANY;
-    addr.sin_port        = __htons(pal_sec.mcast_port);
-
-    /* set up server (sender) side */
-
-    int srv = INLINE_SYSCALL(socket, 3, AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
-
-    if (IS_ERR(srv))
-        goto err;
-
-    ret = INLINE_SYSCALL(setsockopt, 5, srv, IPPROTO_IP, IP_MULTICAST_IF, &addr.sin_addr.s_addr,
-                         sizeof(addr.sin_addr.s_addr));
-    if (IS_ERR(ret))
-        goto err_srv;
-
-    /* set up client (receiver) side */
-
-    int cli = INLINE_SYSCALL(socket, 3, AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
-
-    if (IS_ERR(cli))
-        goto err_srv;
-
-    int reuse = 1;
-    INLINE_SYSCALL(setsockopt, 5, cli, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
-
-    ret = INLINE_SYSCALL(bind, 3, cli, &addr, sizeof(addr));
-    if (IS_ERR(ret))
-        goto err_cli;
-
-    ret = INLINE_SYSCALL(setsockopt, 5, cli, IPPROTO_IP, IP_MULTICAST_IF, &addr.sin_addr.s_addr,
-                         sizeof(addr.sin_addr.s_addr));
-    if (IS_ERR(ret))
-        goto err_cli;
-
-    inet_pton4(GRAPHENE_MCAST_GROUP, sizeof(GRAPHENE_MCAST_GROUP) - 1, &addr.sin_addr.s_addr);
-
-    struct ip_mreq group;
-    group.imr_multiaddr.s_addr = addr.sin_addr.s_addr;
-    group.imr_interface.s_addr = INADDR_ANY;
-    ret = INLINE_SYSCALL(setsockopt, 5, cli, IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group));
-    if (IS_ERR(ret))
-        goto err_cli;
-
-    PAL_HANDLE hdl = malloc(HANDLE_SIZE(mcast));
-    SET_HANDLE_TYPE(hdl, mcast);
-    HANDLE_HDR(hdl)->flags |= WFD(1);
-    hdl->mcast.srv         = srv;
-    hdl->mcast.cli         = cli;
-    hdl->mcast.port        = (PAL_NUM)pal_sec.mcast_port;
-    hdl->mcast.nonblocking = PAL_FALSE;
-    hdl->mcast.addr        = (PAL_PTR)malloc_copy(&addr, sizeof(addr));
-    return hdl;
-
-err_cli:
-    INLINE_SYSCALL(close, 1, cli);
-err_srv:
-    INLINE_SYSCALL(close, 1, srv);
-err:
-    return NULL;
-}
-
-static int64_t mcast_send(PAL_HANDLE handle, uint64_t offset, uint64_t size, const void* buf) {
-    if (offset)
-        return -PAL_ERROR_INVAL;
-
-    if (handle->mcast.srv == PAL_IDX_POISON)
-        return -PAL_ERROR_BADHANDLE;
-
-    struct msghdr hdr;
-    struct iovec iov;
-    iov.iov_base       = (void*)buf;
-    iov.iov_len        = size;
-    hdr.msg_name       = (char*)handle->mcast.addr;
-    hdr.msg_namelen    = sizeof(struct sockaddr_in);
-    hdr.msg_iov        = &iov;
-    hdr.msg_iovlen     = 1;
-    hdr.msg_control    = NULL;
-    hdr.msg_controllen = 0;
-    hdr.msg_flags      = 0;
-
-    int64_t bytes = INLINE_SYSCALL(sendmsg, 3, handle->mcast.srv, &hdr, MSG_NOSIGNAL);
-
-    if (IS_ERR(bytes))
-        switch (ERRNO(bytes)) {
-            case ECONNRESET:
-            case EPIPE:
-                return -PAL_ERROR_CONNFAILED;
-            default:
-                return unix_to_pal_error(ERRNO(bytes));
-        }
-
-    assert(!IS_ERR(bytes));
-    return bytes;
-}
-
-static int64_t mcast_receive(PAL_HANDLE handle, uint64_t offset, size_t size, void* buf) {
-    if (offset)
-        return -PAL_ERROR_INVAL;
-
-    if (handle->mcast.cli == PAL_IDX_POISON)
-        return -PAL_ERROR_BADHANDLE;
-
-    struct msghdr hdr;
-    struct iovec iov;
-    iov.iov_base       = buf;
-    iov.iov_len        = size;
-    hdr.msg_name       = NULL;
-    hdr.msg_namelen    = 0;
-    hdr.msg_iov        = &iov;
-    hdr.msg_iovlen     = 1;
-    hdr.msg_control    = NULL;
-    hdr.msg_controllen = 0;
-    hdr.msg_flags      = 0;
-
-    int64_t bytes = INLINE_SYSCALL(recvmsg, 3, handle->mcast.cli, &hdr, 0);
-
-    if (IS_ERR(bytes))
-        return -PAL_ERROR_DENIED;
-
-    return bytes;
-}
-
-static int mcast_attrquerybyhdl(PAL_HANDLE handle, PAL_STREAM_ATTR* attr) {
-    int ret, val;
-
-    if (handle->mcast.cli == PAL_IDX_POISON)
-        return -PAL_ERROR_BADHANDLE;
-
-    ret = INLINE_SYSCALL(ioctl, 3, handle->mcast.cli, FIONREAD, &val);
-    if (IS_ERR(ret))
-        return unix_to_pal_error(ERRNO(ret));
-
-    attr->handle_type  = pal_type_mcast;
-    attr->disconnected = HANDLE_HDR(handle)->flags & (ERROR(0) | ERROR(1));
-    attr->nonblocking  = handle->mcast.nonblocking;
-    attr->readable     = !!val;
-    attr->writable     = PAL_TRUE;
-    attr->runnable     = PAL_FALSE;
-    attr->pending_size = val;
-
-    return 0;
-}
-
-static int mcast_attrsetbyhdl(PAL_HANDLE handle, PAL_STREAM_ATTR* attr) {
-    if (handle->mcast.cli == PAL_IDX_POISON)
-        return -PAL_ERROR_BADHANDLE;
-
-    int ret;
-    PAL_BOL* nonblocking = &handle->mcast.nonblocking;
-
-    if (attr->nonblocking != *nonblocking) {
-        ret = INLINE_SYSCALL(fcntl, 3, handle->mcast.cli, F_SETFL, *nonblocking ? O_NONBLOCK : 0);
-
-        if (IS_ERR(ret))
-            return unix_to_pal_error(ERRNO(ret));
-
-        *nonblocking = attr->nonblocking;
-    }
-
-    return 0;
-}
-
-struct handle_ops mcast_ops = {
-    .write          = &mcast_send,
-    .read           = &mcast_receive,
-    .attrquerybyhdl = &mcast_attrquerybyhdl,
-    .attrsetbyhdl   = &mcast_attrsetbyhdl,
-};

+ 0 - 8
Pal/src/host/Linux/pal_host.h

@@ -141,14 +141,6 @@ typedef struct pal_handle
             PAL_BOL nonblocking;
         } process;
 
-        struct {
-            PAL_IDX cli;
-            PAL_IDX srv;
-            PAL_IDX port;
-            PAL_BOL nonblocking;
-            PAL_PTR addr;
-        } mcast;
-
         struct {
             PAL_IDX tid;
             PAL_PTR stack;

+ 0 - 1
Pal/src/host/Linux/pal_linux.h

@@ -45,7 +45,6 @@
 #define ERRNO_P INTERNAL_SYSCALL_ERRNO_P
 
 #define GRAPHENE_UNIX_PREFIX_FMT       "/graphene/%016lx"
-#define GRAPHENE_MCAST_GROUP           "239.0.0.1"
 
 struct timespec;
 struct timeval;

+ 0 - 1
Pal/src/host/Linux/pal_security.h

@@ -64,7 +64,6 @@ extern struct pal_sec {
 
     /* pipes and sockets */
     unsigned long pipe_prefix_id;
-    unsigned short mcast_port;
 
     /* for debugger */
     void (*_dl_debug_state)(void);

+ 0 - 22
Pal/src/host/Skeleton/db_sockets.c

@@ -169,25 +169,3 @@ struct handle_ops udpsrv_ops = {
     .close          = &socket_close,
     .attrquerybyhdl = &socket_attrquerybyhdl,
 };
-
-PAL_HANDLE _DkBroadcastStreamOpen(void) {
-    return NULL;
-}
-
-static int64_t mcast_send(PAL_HANDLE handle, uint64_t offset, uint64_t size, const void* buf) {
-    return -PAL_ERROR_NOTIMPLEMENTED;
-}
-
-static int64_t mcast_receive(PAL_HANDLE handle, uint64_t offset, uint64_t size, void* buf) {
-    return -PAL_ERROR_NOTIMPLEMENTED;
-}
-
-static int mcast_close(PAL_HANDLE handle) {
-    return -PAL_ERROR_NOTIMPLEMENTED;
-}
-
-struct handle_ops mcast_ops = {
-    .write = &mcast_send,
-    .read  = &mcast_receive,
-    .close = &mcast_close,
-};

+ 0 - 4
Pal/src/host/Skeleton/pal_host.h

@@ -82,10 +82,6 @@ typedef struct pal_handle {
             PAL_IDX unused;
         } process;
 
-        struct {
-            PAL_IDX unused;
-        } mcast;
-
         struct {
             PAL_IDX unused;
         } thread;

+ 0 - 3
Pal/src/pal.h

@@ -123,7 +123,6 @@ enum {
     pal_type_udp,
     pal_type_udpsrv,
     pal_type_process,
-    pal_type_mcast,
     pal_type_thread,
     pal_type_mutex,
     pal_type_event,
@@ -170,8 +169,6 @@ typedef struct {
     PAL_HANDLE first_thread;
     /* debug stream */
     PAL_HANDLE debug_stream;
-    /* broadcast RPC stream */
-    PAL_HANDLE broadcast_stream;
 
     /***** Memory layout ******/
     /* The range of user address */

+ 0 - 2
Pal/src/pal_internal.h

@@ -289,7 +289,6 @@ int _DkStreamGetName (PAL_HANDLE handle, char * buf, int size);
 const char * _DkStreamRealpath (PAL_HANDLE hdl);
 int _DkSendHandle(PAL_HANDLE hdl, PAL_HANDLE cargo);
 int _DkReceiveHandle(PAL_HANDLE hdl, PAL_HANDLE * cargo);
-PAL_HANDLE _DkBroadcastStreamOpen (void);
 
 /* DkProcess and DkThread calls */
 int _DkThreadCreate (PAL_HANDLE * handle, int (*callback) (void *),
@@ -338,7 +337,6 @@ void _DkExceptionReturn (void * event);
 void _DkInternalLock(PAL_LOCK* mut);
 void _DkInternalUnlock(PAL_LOCK* mut);
 unsigned long _DkSystemTimeQuery (void);
-size_t _DkFastRandomBitsRead (void * buffer, size_t size);
 
 /*
  * Cryptographically secure random.

+ 0 - 41
Pal/test/Broadcast.c

@@ -1,41 +0,0 @@
-/* This Hello World demostrate a simple multithread program */
-
-#define DO_BENCH 1
-
-#include "pal.h"
-#include "pal_debug.h"
-
-int main(int argc, char** argv) {
-    if (argc == 1) {
-        char id[2]            = {'0', 0};
-        const char* newargs[] = {"Broadcast", id, NULL};
-        PAL_HANDLE proc[4];
-        int i;
-
-        for (i = 0; i < 4; i++) {
-            id[0]   = '0' + i + 1;
-            proc[i] = DkProcessCreate("file:Broadcast", newargs);
-        }
-
-        DkThreadDelayExecution(1000000);
-        DkStreamWrite(pal_control.broadcast_stream, 0, 12, "Hello World", NULL);
-
-        for (i = 0; i < 4; i++) {
-            char byte;
-            DkStreamRead(proc[i], 0, 1, &byte, NULL, 0);
-            pal_printf("process %d exited\n", i + 1);
-        }
-    } else {
-        char bytes[12];
-
-        pal_printf("process %s started\n", argv[1]);
-
-        DkStreamRead(pal_control.broadcast_stream, 0, 12, bytes, NULL, 0);
-
-        pal_printf("process %s received: %s\n", argv[1], bytes);
-
-        DkStreamWrite(pal_control.parent_process, 0, 1, "0", NULL);
-    }
-
-    return 0;
-}

+ 2 - 2
Pal/test/Makefile

@@ -11,8 +11,8 @@ include ../../Makefile.rules
 include ../src/Makefile.Test
 
 executables = HelloWorld File Failure Thread Fork Event Process Exception \
-	      Memory Pipe Tcp Udp Yield Broadcast Server Wait HandleSend \
-	      Select Segment Sleep Cpuid Pie
+	      Memory Pipe Tcp Udp Yield Server Wait HandleSend Select Segment \
+	      Sleep Cpuid Pie
 manifests = manifest
 
 target = $(executables) $(manifests)