[PATCH 1/3] libnetworking: Avoid spurious event delivery

2015-01-16 Thread Sebastian Huber
The so_pgid field contains the task identifier if this task waits for
the SOSLEEP_EVENT event.  Do not inherit this from the accept socket.
---
 cpukit/libnetworking/kern/uipc_socket2.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/cpukit/libnetworking/kern/uipc_socket2.c 
b/cpukit/libnetworking/kern/uipc_socket2.c
index 8c760ad..f42b612 100644
--- a/cpukit/libnetworking/kern/uipc_socket2.c
+++ b/cpukit/libnetworking/kern/uipc_socket2.c
@@ -226,7 +226,6 @@ sonewconn1(struct socket *head, int connstatus)
so->so_state = head->so_state | SS_NOFDREF;
so->so_proto = head->so_proto;
so->so_timeo = head->so_timeo;
-   so->so_pgid = head->so_pgid;
so->so_uid = head->so_uid;
(void) soreserve(so, head->so_snd.sb_hiwat, head->so_rcv.sb_hiwat);
if (connstatus) {
-- 
1.8.4.5

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH 2/3] libnetworking: Delete dead code

2015-01-16 Thread Sebastian Huber
The so_uid is always 0 in RTEMS.
---
 cpukit/libnetworking/kern/uipc_socket.c  | 1 -
 cpukit/libnetworking/kern/uipc_socket2.c | 1 -
 cpukit/libnetworking/netinet/in_pcb.c| 7 ---
 cpukit/libnetworking/sys/socketvar.h | 1 -
 4 files changed, 10 deletions(-)

diff --git a/cpukit/libnetworking/kern/uipc_socket.c 
b/cpukit/libnetworking/kern/uipc_socket.c
index 7a16f7e..7ed3ad0 100644
--- a/cpukit/libnetworking/kern/uipc_socket.c
+++ b/cpukit/libnetworking/kern/uipc_socket.c
@@ -79,7 +79,6 @@ socreate(int dom, struct socket **aso, int type, int proto,
TAILQ_INIT(&so->so_comp);
so->so_type = type;
so->so_state = SS_PRIV;
-   so->so_uid = 0;
so->so_proto = prp;
error = (*prp->pr_usrreqs->pru_attach)(so, proto);
if (error) {
diff --git a/cpukit/libnetworking/kern/uipc_socket2.c 
b/cpukit/libnetworking/kern/uipc_socket2.c
index f42b612..c2d18b1 100644
--- a/cpukit/libnetworking/kern/uipc_socket2.c
+++ b/cpukit/libnetworking/kern/uipc_socket2.c
@@ -226,7 +226,6 @@ sonewconn1(struct socket *head, int connstatus)
so->so_state = head->so_state | SS_NOFDREF;
so->so_proto = head->so_proto;
so->so_timeo = head->so_timeo;
-   so->so_uid = head->so_uid;
(void) soreserve(so, head->so_snd.sb_hiwat, head->so_rcv.sb_hiwat);
if (connstatus) {
TAILQ_INSERT_TAIL(&head->so_comp, so, so_list);
diff --git a/cpukit/libnetworking/netinet/in_pcb.c 
b/cpukit/libnetworking/netinet/in_pcb.c
index fe34fbb..c41e634 100644
--- a/cpukit/libnetworking/netinet/in_pcb.c
+++ b/cpukit/libnetworking/netinet/in_pcb.c
@@ -190,13 +190,6 @@ in_pcbbind(struct inpcb *inp, struct mbuf *nam)
if (ntohs(lport) < IPPORT_RESERVED &&
(error = suser(p->p_ucred, &p->p_acflag)))
return (EACCES);
-   if (so->so_uid) {
-   t = in_pcblookup(inp->inp_pcbinfo, zeroin_addr,
-   0, sin->sin_addr, lport,
-   INPLOOKUP_WILDCARD);
-   if (t && (so->so_uid != t->inp_socket->so_uid))
-   return (EADDRINUSE);
-   }
t = in_pcblookup(inp->inp_pcbinfo, zeroin_addr, 0,
sin->sin_addr, lport, wild);
if (t && (reuseport & t->inp_socket->so_options) == 0)
diff --git a/cpukit/libnetworking/sys/socketvar.h 
b/cpukit/libnetworking/sys/socketvar.h
index 829b61d..09bb2a5 100644
--- a/cpukit/libnetworking/sys/socketvar.h
+++ b/cpukit/libnetworking/sys/socketvar.h
@@ -103,7 +103,6 @@ struct socket {
caddr_t so_tpcb;/* Wisc. protocol control block XXX */
void(*so_upcall)(struct socket *, void *arg, int);
void*so_upcallarg;  /* Arg for above */
-   uid_t   so_uid; /* who opened the socket */
 };
 
 /*
-- 
1.8.4.5

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH 3/3 v3] libnetworking: Fix close of active sockets

2015-01-16 Thread Sebastian Huber
Send a special event to notify tasks waiting for a socket state change
in case this socket gets closed.  This prevents a use after free.

Close #785.

v2: Cover also select().
v3: Fix lost events in case the receiver has a lower priority than the sender.

---
 cpukit/libnetworking/kern/uipc_socket.c|  31 +++-
 cpukit/libnetworking/rtems/rtems_bsdnet_internal.h |   2 +-
 cpukit/libnetworking/rtems/rtems_glue.c| 101 +--
 cpukit/libnetworking/rtems/rtems_select.c  |   7 +-
 cpukit/libnetworking/rtems/rtems_syscall.c |  22 +--
 cpukit/rtems/include/rtems/rtems/event.h   |   5 +
 testsuites/libtests/syscall01/init.c   | 191 -
 testsuites/samples/loopback/init.c |   5 +-
 8 files changed, 286 insertions(+), 78 deletions(-)

diff --git a/cpukit/libnetworking/kern/uipc_socket.c 
b/cpukit/libnetworking/kern/uipc_socket.c
index 7ed3ad0..c9e8990 100644
--- a/cpukit/libnetworking/kern/uipc_socket.c
+++ b/cpukit/libnetworking/kern/uipc_socket.c
@@ -145,6 +145,30 @@ sofree(struct socket *so)
FREE(so, M_SOCKET);
 }
 
+static void
+rtems_socket_close_notify(struct socket *so)
+{
+   pid_t pid = so->so_pgid;
+
+   if (pid) {
+   so->so_pgid = 0;
+   rtems_event_system_send(pid, RTEMS_EVENT_SYSTEM_NETWORK_CLOSE);
+   }
+}
+
+static void
+rtems_sockbuf_close_notify(struct socket *so, struct sockbuf *sb)
+{
+   if (sb->sb_flags & SB_WAIT) {
+   sb->sb_flags &= ~SB_WAIT;
+   rtems_event_system_send(sb->sb_sel.si_pid,
+   RTEMS_EVENT_SYSTEM_NETWORK_CLOSE);
+   }
+
+   if (sb->sb_wakeup)
+   (*sb->sb_wakeup)(so, sb->sb_wakeuparg);
+}
+
 /*
  * Close a socket on last file table reference removal.
  * Initiate disconnect if connected.
@@ -156,6 +180,10 @@ soclose(struct socket *so)
int s = splnet();   /* conservative */
int error = 0;
 
+   rtems_socket_close_notify(so);
+   rtems_sockbuf_close_notify(so, &so->so_snd);
+   rtems_sockbuf_close_notify(so, &so->so_rcv);
+
if (so->so_options & SO_ACCEPTCONN) {
struct socket *sp, *sonext;
 
@@ -742,7 +770,8 @@ dontblock:
break;
error = sbwait(&so->so_rcv);
if (error) {
-   sbunlock(&so->so_rcv);
+   if (error != ENXIO)
+   sbunlock(&so->so_rcv);
splx(s);
return (0);
}
diff --git a/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h 
b/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
index 5be781b..b790f05 100644
--- a/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
+++ b/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
@@ -219,7 +219,7 @@ int ioctl (int, ioctl_command_t, ...);
 #define NETISR_IP_EVENT(1L << NETISR_IP)
 #define NETISR_ARP_EVENT   (1L << NETISR_ARP)
 #define NETISR_EVENTS  (NETISR_IP_EVENT|NETISR_ARP_EVENT)
-#if (SBWAIT_EVENT & SOSLEEP_EVENT & NETISR_EVENTS)
+#if (SBWAIT_EVENT & SOSLEEP_EVENT & NETISR_EVENTS & 
RTEMS_EVENT_SYSTEM_NETWORK_CLOSE)
 # error "Network event conflict"
 #endif
 
diff --git a/cpukit/libnetworking/rtems/rtems_glue.c 
b/cpukit/libnetworking/rtems/rtems_glue.c
index 4c90a98..4e66428 100644
--- a/cpukit/libnetworking/rtems/rtems_glue.c
+++ b/cpukit/libnetworking/rtems/rtems_glue.c
@@ -432,47 +432,62 @@ rtems_bsdnet_semaphore_release (void)
 #endif
 }
 
-/*
- * Wait for something to happen to a socket buffer
- */
-int
-sbwait(struct sockbuf *sb)
+static int
+rtems_bsdnet_sleep(rtems_event_set in, rtems_interval ticks)
 {
-   rtems_event_set events;
-   rtems_id tid;
rtems_status_code sc;
+   rtems_event_set out;
+   rtems_event_set out2;
+
+   in |= RTEMS_EVENT_SYSTEM_NETWORK_CLOSE;
 
/*
-* Soak up any pending events.
-* The sleep/wakeup synchronization in the FreeBSD
-* kernel has no memory.
+* Soak up any pending events.  The sleep/wakeup synchronization in the
+* FreeBSD kernel has no memory.
 */
-   rtems_event_system_receive (SBWAIT_EVENT, RTEMS_EVENT_ANY | 
RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &events);
+   rtems_event_system_receive(in, RTEMS_EVENT_ANY | RTEMS_NO_WAIT,
+   RTEMS_NO_TIMEOUT, &out);
 
/*
-* Set this task as the target of the wakeup operation.
+* Wait for the wakeup event.
 */
-   rtems_task_ident (RTEMS_SELF, 0, &tid);
-   sb->sb_sel.si_pid = tid;
+   sc = rtems_bsdnet_event_receive(in, RTEMS_EVENT_ANY | RTEMS_WAIT,
+   ticks, &out);
 
/*
-* Show that socket is waiting
+* Get additional events that may have been received between the
+* rtems_event_system_receive() and the rtems_bsdnet_semaphore_obtain().
 

[PATCH v4] libnetworking: Fix close of active sockets

2015-01-16 Thread Sebastian Huber
Send a special event to notify tasks waiting for a socket state change
in case this socket gets closed.  This prevents a use after free.

Close #785.

v2: Cover also select().

v3: Fix lost events in case the receiver has a lower priority than the sender.

v4: Clear the event delivery request at the receiver side to avoid another race
condition.
---
 cpukit/libnetworking/kern/uipc_socket.c|  27 ++-
 cpukit/libnetworking/rtems/rtems_bsdnet_internal.h |   2 +-
 cpukit/libnetworking/rtems/rtems_glue.c| 109 ++--
 cpukit/libnetworking/rtems/rtems_select.c  |   7 +-
 cpukit/libnetworking/rtems/rtems_syscall.c |  22 +--
 cpukit/rtems/include/rtems/rtems/event.h   |   5 +
 testsuites/libtests/syscall01/init.c   | 191 -
 testsuites/samples/loopback/init.c |   5 +-
 8 files changed, 291 insertions(+), 77 deletions(-)

diff --git a/cpukit/libnetworking/kern/uipc_socket.c 
b/cpukit/libnetworking/kern/uipc_socket.c
index 7ed3ad0..b221a37 100644
--- a/cpukit/libnetworking/kern/uipc_socket.c
+++ b/cpukit/libnetworking/kern/uipc_socket.c
@@ -145,6 +145,26 @@ sofree(struct socket *so)
FREE(so, M_SOCKET);
 }
 
+static void
+rtems_socket_close_notify(struct socket *so)
+{
+   if (so->so_pgid) {
+   rtems_event_system_send(so->so_pgid, 
RTEMS_EVENT_SYSTEM_NETWORK_CLOSE);
+   }
+}
+
+static void
+rtems_sockbuf_close_notify(struct socket *so, struct sockbuf *sb)
+{
+   if (sb->sb_flags & SB_WAIT) {
+   rtems_event_system_send(sb->sb_sel.si_pid,
+   RTEMS_EVENT_SYSTEM_NETWORK_CLOSE);
+   }
+
+   if (sb->sb_wakeup)
+   (*sb->sb_wakeup)(so, sb->sb_wakeuparg);
+}
+
 /*
  * Close a socket on last file table reference removal.
  * Initiate disconnect if connected.
@@ -156,6 +176,10 @@ soclose(struct socket *so)
int s = splnet();   /* conservative */
int error = 0;
 
+   rtems_socket_close_notify(so);
+   rtems_sockbuf_close_notify(so, &so->so_snd);
+   rtems_sockbuf_close_notify(so, &so->so_rcv);
+
if (so->so_options & SO_ACCEPTCONN) {
struct socket *sp, *sonext;
 
@@ -742,7 +766,8 @@ dontblock:
break;
error = sbwait(&so->so_rcv);
if (error) {
-   sbunlock(&so->so_rcv);
+   if (error != ENXIO)
+   sbunlock(&so->so_rcv);
splx(s);
return (0);
}
diff --git a/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h 
b/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
index 5be781b..b790f05 100644
--- a/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
+++ b/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
@@ -219,7 +219,7 @@ int ioctl (int, ioctl_command_t, ...);
 #define NETISR_IP_EVENT(1L << NETISR_IP)
 #define NETISR_ARP_EVENT   (1L << NETISR_ARP)
 #define NETISR_EVENTS  (NETISR_IP_EVENT|NETISR_ARP_EVENT)
-#if (SBWAIT_EVENT & SOSLEEP_EVENT & NETISR_EVENTS)
+#if (SBWAIT_EVENT & SOSLEEP_EVENT & NETISR_EVENTS & 
RTEMS_EVENT_SYSTEM_NETWORK_CLOSE)
 # error "Network event conflict"
 #endif
 
diff --git a/cpukit/libnetworking/rtems/rtems_glue.c 
b/cpukit/libnetworking/rtems/rtems_glue.c
index 4c90a98..93eb4d4 100644
--- a/cpukit/libnetworking/rtems/rtems_glue.c
+++ b/cpukit/libnetworking/rtems/rtems_glue.c
@@ -432,47 +432,68 @@ rtems_bsdnet_semaphore_release (void)
 #endif
 }
 
-/*
- * Wait for something to happen to a socket buffer
- */
-int
-sbwait(struct sockbuf *sb)
+static int
+rtems_bsdnet_sleep(rtems_event_set in, rtems_interval ticks)
 {
-   rtems_event_set events;
-   rtems_id tid;
rtems_status_code sc;
+   rtems_event_set out;
+   rtems_event_set out2;
+
+   in |= RTEMS_EVENT_SYSTEM_NETWORK_CLOSE;
 
/*
-* Soak up any pending events.
-* The sleep/wakeup synchronization in the FreeBSD
-* kernel has no memory.
+* Soak up any pending events.  The sleep/wakeup synchronization in the
+* FreeBSD kernel has no memory.
 */
-   rtems_event_system_receive (SBWAIT_EVENT, RTEMS_EVENT_ANY | 
RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &events);
+   rtems_event_system_receive(in, RTEMS_EVENT_ANY | RTEMS_NO_WAIT,
+   RTEMS_NO_TIMEOUT, &out);
 
/*
-* Set this task as the target of the wakeup operation.
+* Wait for the wakeup event.
 */
-   rtems_task_ident (RTEMS_SELF, 0, &tid);
-   sb->sb_sel.si_pid = tid;
+   sc = rtems_bsdnet_event_receive(in, RTEMS_EVENT_ANY | RTEMS_WAIT,
+   ticks, &out);
 
/*
-* Show that socket is waiting
+* Get additional events that may have been received between the
+* rtems_event_system_receive() and the rtems_bsdnet_semaphore_obtain().
  

RTEMS - sparc/leon3 BSP configure script error

2015-01-16 Thread Francois ARSENAULT
Hello,
I am new to RTEMS and I want to build a RTEMS application for the sparc/leon3 
BSP.
For start, I just want to compile/build RTEMS as is without any modification.

I have the following issue: when executed, the "configure" script generates 
this error:
../../configure --target=sparc-rtems --prefix=/cygdrive/c/COLKa/src/rtems-4.10.2
../../configure: line 1779: syntax error near unexpected token `.'
../../configure: line 1779: `RTEMS_TOP(.)'

Here are the details of the host/target and build commands
1) The host is Windows7/Cygwin-32bits
2) The RTEMS version is rtems-4.10.2.tar.bz2 (downloaded from 
http://git.rtems.org/rtems/)
3) Build commands:
tar xjvf rtems-4.10.2.tar.bz2
cd rtems-4.10.2
ln -s /bin/gcc.exe /bin/cc.exe
export 
PATH=/cygdrive/c/opt/sparc-elf-4.4.2-mingw/bin:/cygdrive/c/opt/rtems-4.10-mingw/bin:${PATH}
aclocal-1.11
autoscan-2.69
autoconf-2.69
automake-1.11 --add-missing
cd tools/build
../../configure -target=sparc-rtems -prefix=/cygdrive/c/COLKa/src/rtems-4.10.2

THIS COMMAND GENERATES THE FOLLOWING ERRORS:
../../configure: line 1779: syntax error near unexpected token `.'
../../configure: line 1779: `RTEMS_TOP(.)'

It seems that "RTEMS_TOP" is not defined.
I have also tried a RTEMS Gaisler distribution (rtems-4.8-1.1.2-src.tar.bz2) 
using  a Linux/Ubuntu host and I have the same error.
I have also try different autoconf and automake versions and I have the same 
error.
How can I fix this issue?

Thanks,
Francois Arsenault
Software Engineer

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: RTEMS - sparc/leon3 BSP configure script error

2015-01-16 Thread Marcos Díaz
Hi, have you tried to run ./bootstrap in the source code folder?

On Fri, Jan 16, 2015 at 9:57 AM, Francois ARSENAULT <
francois.arsena...@mdacorporation.com> wrote:

>  Hello,
>
> I am new to RTEMS and I want to build a RTEMS application for the
> sparc/leon3 BSP.
>
> For start, I just want to compile/build RTEMS as is without any
> modification.
>
>
>
> I have the following issue: when executed, the “configure” script
> generates this error:
>
> ../../configure --target=sparc-rtems
> --prefix=/cygdrive/c/COLKa/src/rtems-4.10.2
>
> ../../configure: line 1779: syntax error near unexpected token `.'
>
> ../../configure: line 1779: `RTEMS_TOP(.)'
>
>
>
> Here are the details of the host/target and build commands
>
> 1) The host is Windows7/Cygwin-32bits
>
> 2) The RTEMS version is rtems-4.10.2.tar.bz2 (downloaded from
> http://git.rtems.org/rtems/)
>
> 3) Build commands:
>
> tar xjvf rtems-4.10.2.tar.bz2
>
> cd rtems-4.10.2
>
> ln -s /bin/gcc.exe /bin/cc.exe
>
> export
> PATH=/cygdrive/c/opt/sparc-elf-4.4.2-mingw/bin:/cygdrive/c/opt/rtems-4.10-mingw/bin:${PATH}
>
> aclocal-1.11
>
> autoscan-2.69
>
> autoconf-2.69
>
> automake-1.11 --add-missing
>
> cd tools/build
>
> ../../configure -target=sparc-rtems
> -prefix=/cygdrive/c/COLKa/src/rtems-4.10.2
>
>
>
> THIS COMMAND GENERATES THE FOLLOWING ERRORS:
>
> ../../configure: line 1779: syntax error near unexpected token `.'
>
> ../../configure: line 1779: `RTEMS_TOP(.)'
>
>
>
> It seems that “RTEMS_TOP” is not defined.
>
> I have also tried a RTEMS Gaisler distribution
> (rtems-4.8-1.1.2-src.tar.bz2) using  a Linux/Ubuntu host and I have the
> same error.
>
> I have also try different autoconf and automake versions and I have the
> same error.
>
> How can I fix this issue?
>
>
>
> Thanks,
>
> Francois Arsenault
>
> Software Engineer
>
>
>
> ___
> devel mailing list
> devel@rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>



-- 

__




Marcos Díaz

Software Engineer


San Lorenzo 47, 3rd Floor, Office 5

Córdoba, Argentina


Phone: +54 351 4217888 / +54 351 4218211/ +54 351 7617452

Skype: markdiaz22
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Problem when running all tests

2015-01-16 Thread Marcos Díaz
Hi, We were running all tests for the TMS570 and we could see that these
two tests:
/testsuites/libtests/dl01

/testsuites/libtests/dl02

failed to build.
We saw in theirs Makefile.am that have this line:

rm dl01.pre.ralf


And there it fails. We could see that not all the bsp have as a
postlink instruction to generate a .ralf file, so was our case and
that's why it fails.

-- 

__




Marcos Díaz

Software Engineer


San Lorenzo 47, 3rd Floor, Office 5

Córdoba, Argentina


Phone: +54 351 4217888 / +54 351 4218211/ +54 351 7617452

Skype: markdiaz22
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

dl01 Makefile was Re: Problem when running all tests

2015-01-16 Thread Joel Sherrill

On 1/16/2015 2:46 PM, Marcos Díaz wrote:
> Hi, We were running all tests for the TMS570 and we could see that
> these two tests:
> /testsuites/libtests/dl01
>
> /testsuites/libtests/dl02
>
> failed to build.
> We saw in theirs Makefile.am that have this line:
> |rm dl01.pre.ralf|
> |
> |
> |And there it fails. We could see that not all the bsp have as a postlink 
> instruction to generate a .ralf file, so was our case and that's why it 
> fails.|

I don't know why I haven't seen this before but apparently if you
do a second make, it works.

I changed the subject. I think it needs to be rm -f in case it isn't there.

But Chris needs to comment.


> -- 
>
> __
>
> 
>
> *
> *
>
> Marcos Díaz
>
> Software Engineer
>
> *
> *
>
> San Lorenzo 47, 3rd Floor, Office 5
>
> Córdoba, Argentina
>
> *
> *
>
> Phone:+54 351 4217888 / +54 351 4218211/ +54 351 7617452
>
> Skype:markdiaz22
>
>

-- 
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherr...@oarcorp.comOn-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available(256) 722-9985

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: dl01 Makefile was Re: Problem when running all tests

2015-01-16 Thread Chris Johns

On 17/01/2015 8:20 am, Joel Sherrill wrote:


On 1/16/2015 2:46 PM, Marcos Díaz wrote:

Hi, We were running all tests for the TMS570 and we could see that
these two tests:
/testsuites/libtests/dl01

/testsuites/libtests/dl02

failed to build.
We saw in theirs Makefile.am that have this line:
|rm dl01.pre.ralf|
|
|
|And there it fails. We could see that not all the bsp have as a postlink 
instruction to generate a .ralf file, so was our case and that's why it fails.|


I don't know why I haven't seen this before but apparently if you
do a second make, it works.

I changed the subject. I think it needs to be rm -f in case it isn't there.



Yes adding a -f should do the trick. I suspect this is due to the 
$(make-exe) macro not creating a .ralf file.


Marcos, would you like to create a patch ?

Thanks
Chris
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel