summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJennifer Averett <jennifer.averett@oarcorp.com>2012-05-01 13:52:03 -0500
committerJennifer Averett <jennifer.averett@oarcorp.com>2012-05-01 13:52:03 -0500
commit73a88812687f949d24f3a0c66227551cf18940df (patch)
tree81c5c32b9c89702b5390a15af3fb64e9b509f43e
parentAdded a define of 0 for bootverbose. (diff)
downloadrtems-libbsd-73a88812687f949d24f3a0c66227551cf18940df.tar.bz2
Added rtems_bsd_thread0_ucred as a single global ucred.
-rw-r--r--freebsd/kern/init_main.c9
-rw-r--r--freebsd/netinet/tcp_syncache.c11
-rw-r--r--freebsd/sys/proc.h4
3 files changed, 24 insertions, 0 deletions
diff --git a/freebsd/kern/init_main.c b/freebsd/kern/init_main.c
index 540e0cb1..8ae8a71f 100644
--- a/freebsd/kern/init_main.c
+++ b/freebsd/kern/init_main.c
@@ -118,6 +118,8 @@ SYSINIT(placeholder, SI_SUB_DUMMY, SI_ORDER_ANY, NULL, NULL);
* The sysinit table itself. Items are checked off as the are run.
* If we want to register new sysinit types, add them to newsysinit.
*/
+#else /* __rtems__ */
+struct ucred *rtems_bsd_thread0_ucred;
#endif /* __rtems__ */
SET_DECLARE(sysinit_set, struct sysinit);
#ifndef __rtems__
@@ -191,6 +193,13 @@ mi_startup(void)
#ifndef __rtems__
if (boothowto & RB_VERBOSE)
bootverbose++;
+#else /* __rtems__ */
+ rtems_bsd_thread0_ucred = crget();
+ rtems_bsd_thread0_ucred->cr_ngroups = 1; /* group 0 */
+ rtems_bsd_thread0_ucred->cr_uidinfo = uifind(0);
+ rtems_bsd_thread0_ucred = uifind(0);
+ rtems_bsd_thread0_ucred->cr_prison = &prison0;
+
#endif /* __rtems__ */
if (sysinit == NULL) {
diff --git a/freebsd/netinet/tcp_syncache.c b/freebsd/netinet/tcp_syncache.c
index 17ff3fa4..78790cc8 100644
--- a/freebsd/netinet/tcp_syncache.c
+++ b/freebsd/netinet/tcp_syncache.c
@@ -730,8 +730,13 @@ syncache_socket(struct syncache *sc, struct socket *lso, struct mbuf *m)
laddr6 = inp->in6p_laddr;
if (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr))
inp->in6p_laddr = sc->sc_inc.inc6_laddr;
+#ifndef __rtems__
if ((error = in6_pcbconnect(inp, (struct sockaddr *)&sin6,
thread0.td_ucred)) != 0) {
+#else /* __rtems__ */
+ if ((error = in6_pcbconnect(inp, (struct sockaddr *)&sin6,
+ rtems_bsd_thread0_ucred)) != 0) {
+#endif /* __rtems__ */
inp->in6p_laddr = laddr6;
if ((s = tcp_log_addrs(&sc->sc_inc, NULL, NULL, NULL))) {
log(LOG_DEBUG, "%s; %s: in6_pcbconnect failed "
@@ -765,8 +770,14 @@ syncache_socket(struct syncache *sc, struct socket *lso, struct mbuf *m)
laddr = inp->inp_laddr;
if (inp->inp_laddr.s_addr == INADDR_ANY)
inp->inp_laddr = sc->sc_inc.inc_laddr;
+#ifndef __rtems__
if ((error = in_pcbconnect(inp, (struct sockaddr *)&sin,
thread0.td_ucred)) != 0) {
+#else /* __rtems__ */
+ if ((error = in_pcbconnect(inp, (struct sockaddr *)&sin,
+ rtems_bsd_thread0_ucred)) != 0) {
+#endif /* __rtems__ */
+
inp->inp_laddr = laddr;
if ((s = tcp_log_addrs(&sc->sc_inc, NULL, NULL, NULL))) {
log(LOG_DEBUG, "%s; %s: in_pcbconnect failed "
diff --git a/freebsd/sys/proc.h b/freebsd/sys/proc.h
index ebbffd7c..39ddd782 100644
--- a/freebsd/sys/proc.h
+++ b/freebsd/sys/proc.h
@@ -796,7 +796,11 @@ extern struct sx allproc_lock;
extern struct sx proctree_lock;
extern struct mtx ppeers_lock;
extern struct proc proc0; /* Process slot for swapper. */
+#ifndef __rtems__
extern struct thread thread0; /* Primary thread in proc0. */
+#else /* __rtems__ */
+extern struct ucred *rtems_bsd_thread0_ucred;
+#endif /* __rtems__ */
extern struct vmspace vmspace0; /* VM space for proc0. */
extern int hogticks; /* Limit on kernel cpu hogs. */
extern int lastpid;