Get it to build, not link yet.
authorRonald G. Minnich <rminnich@google.com>
Thu, 16 Jan 2014 23:11:39 +0000 (15:11 -0800)
committerRonald G. Minnich <rminnich@google.com>
Thu, 16 Jan 2014 23:11:39 +0000 (15:11 -0800)
Signed-off-by: Ronald G. Minnich <rminnich@google.com>
kern/include/ns.h
kern/include/setjmp.h
kern/src/net/ip.h
kern/src/testing.c

index 3bef58b..a87a631 100644 (file)
@@ -1,34 +1,10 @@
 // INFERNO
-
-/* error stacks, as defined by us. These are a new implementation. */
-/* add 1 in case they forget they need an entry for the passed-in errbuf */
-#include <setjmp.h>
-struct errbuf *get_cur_errbuf(void);
-void set_cur_errbuf(struct errbuf *ebuf);
-
-struct errbuf {
-       struct jmpbuf jmpbuf;
-};
-
-#define ERRSTACK(x) struct errbuf *prev_errbuf; struct errbuf errstack[(x)];   \
-                    int curindex = 0;
-#define waserror() (errpush(errstack, ARRAY_SIZE(errstack), &curindex,         \
-                            &prev_errbuf) ||                                   \
-                    setjmp(&(get_cur_errbuf()->jmpbuf)))
-#define error(x,...) {set_errstr(x, ##__VA_ARGS__);                            \
-                      longjmp(&get_cur_errbuf()->jmpbuf, (void *)x);}
-#define nexterror() {errpop(errstack, ARRAY_SIZE(errstack), &curindex,         \
-                            prev_errbuf);                                      \
-                     longjmp(&(get_cur_errbuf())->jmpbuf, (void *)1);}
-#define poperror() {errpop(errstack, ARRAY_SIZE(errstack), &curindex,          \
-                           prev_errbuf);}
-
-
+#include <err.h>
+#include <rendez.h>
+#include <rwlock.h>
 /*
  * functions (possibly) linked in, complete, from libc.
  */
-#define ARRAY_SIZE(x)  (sizeof(x)/sizeof((x)[0]))
-
 enum
 {
        UTFmax          = 4,            /* maximum bytes per rune */
@@ -85,15 +61,6 @@ extern       int     parseether( uint8_t *unused_uint8_p_t, char *unused_char_p_t);
 #define        MCACHE  0x0010  /* cache some data */
 #define        MMASK   0x0017  /* all bits on */
 
-#define        OREAD   0       /* open for read */
-#define        OWRITE  1       /* write */
-#define        ORDWR   2       /* read and write */
-#define        OEXEC   3       /* execute, == read but check execute permission */
-#define        OTRUNC  16      /* or'ed in (except for exec), truncate file first */
-#define        OCEXEC  32      /* or'ed in, close on exec */
-#define        ORCLOSE 64      /* or'ed in, remove on close */
-#define OEXCL   0x1000 /* or'ed in, exclusive create */
-
 #define        NCONT   0       /* continue after note */
 #define        NDFLT   1       /* terminate after note */
 #define        NSAVE   2       /* clear note but hold state */
@@ -286,12 +253,6 @@ struct ref
        long    ref;
 };
 
-struct rendez
-{
-       spinlock_t lock;
-       struct proc     *p;
-};
-
 struct rept
 {
        spinlock_t      l;
@@ -308,22 +269,6 @@ enum
        Nopin = -1
 };
 
-typedef struct qlock
-{
-       spinlock_t      use;                    /* to access Qlock structure */
-       struct proc     *head;                  /* next process waiting for object */
-       struct proc     *tail;                  /* last process waiting for object */
-       int     locked;                 /* flag */
-}qlock_t ;
-
-typedef struct rwlock
-{
-       spinlock_t rwlock;                              /* Lock modify lock */
-       struct qlock    x;                      /* Mutual exclusion lock */
-       struct qlock    k;                      /* Lock for waiting writers */
-       int     readers;                /* Count of readers in lock */
-} rwlock_t;
-
 struct talarm
 {
        spinlock_t lock;
@@ -332,7 +277,7 @@ struct talarm
 
 struct alarms
 {
-       struct qlock qlock;
+       qlock_t qlock;
        struct proc*    head;
 };
 
@@ -406,7 +351,7 @@ struct chan
        uint32_t        iounit; /* chunk size for i/o; 0==default */
        struct mhead*   umh;                    /* mount point that derived Chan; used in unionread */
        struct chan*    umc;                    /* channel in union; held for union read */
-       struct qlock    umqlock;                /* serialize unionreads */
+       qlock_t umqlock;                /* serialize unionreads */
        int     uri;                    /* union read index */
        int     dri;                    /* devdirread index */
        uint32_t        mountid;
@@ -542,9 +487,9 @@ struct pgrp
 {
        struct kref ref;                                /* also used as a lock when mounting */
        uint32_t        pgrpid;
-       struct qlock    debug;                  /* single access via devproc.c */
+       qlock_t debug;                  /* single access via devproc.c */
        struct rwlock   ns;                     /* Namespace n read/one write lock */
-       struct qlock    nsh;
+       qlock_t nsh;
        struct mhead*   mnthash[MNTHASH];
        int     progmode;
        struct chan*    dot;
@@ -575,7 +520,7 @@ struct evalue
 struct egrp
 {
        struct kref ref;
-       struct qlock qlock;
+       qlock_t qlock;
        struct evalue   *entries;
        uint32_t        path;   /* qid.path of next Evalue to be allocated */
        uint32_t        vers;   /* of Egrp */
@@ -595,7 +540,7 @@ struct signerkey
 struct skeyset
 {
        struct kref ref;
-       struct qlock qlock;
+       qlock_t qlock;
        uint32_t        flags;
        char*   devs;
        int     nkey;
@@ -669,10 +614,7 @@ void       _assert( char *unused_char_p_t);
 struct block*          bl2mem( uint8_t *unused_uint8_p_t, struct block*, int);
 int            blocklen(struct block*);
 char*          channame(struct chan*);
-int            canlock(spinlock_t*);
-int            canqlock(qlock_t*);
 void           cclose(struct chan*);
-int            canrlock(rwlock_t*);
 void           chandevinit(void);
 void           chandevreset(void);
 void           chandevshutdown(void);
@@ -789,7 +731,6 @@ void        (*kproftick)(uint32_t);
 void           ksetenv( char *unused_char_p_t, char*, int);
 //void         kstrncpy( char *unused_char_p_t, char*, int unused_int, sizeof(char*, char*));
 void           kstrdup( char **unused_char_pp_t, char *unused_char_p_t);
-void           lock(spinlock_t*);
 
 struct cmdtab*         lookupcmd(struct cmdbuf*, struct cmdtab*, int);
 void*          malloc(uint32_t);
@@ -864,7 +805,6 @@ long                qread(struct queue*, void*, int);
 struct block*          qremove(struct queue*);
 void           qreopen(struct queue*);
 void           qsetlimit(struct queue*, int);
-void           qunlock(qlock_t*);
 int            qwindow(struct queue*);
 int            qwrite(struct queue*, void*, int);
 void           randominit(void);
@@ -878,8 +818,6 @@ void                renameproguser( char *unused_char_p_t, char*);
 void           renameuser( char *unused_char_p_t, char*);
 void           resrcwait( char *unused_char_p_t);
 int            return0(void*);
-void           rlock(rwlock_t*);
-void           runlock(rwlock_t*);
 struct proc*           runproc(void);
 void           sched(void);
 void           schedinit(void);
@@ -923,8 +861,6 @@ void                validwstatname( char *unused_char_p_t);
 int            wakeup(struct rendez*);
 int            walk(struct chan**, char **unused_char_pp_t, int unused_int, int, int*);
 void           werrstr( char *unused_char_p_t, ...);
-void           wlock(rwlock_t*);
-void           wunlock(rwlock_t*);
 void*          xalloc(uint32_t);
 void*          xallocz(uint32_t, int);
 void           xfree(void*);
index c6c612e..88f7ccd 100644 (file)
@@ -6,6 +6,6 @@
 #include <arch/setjmp.h>
 
 int setjmp(struct jmpbuf *env) __attribute__((returns_twice));
-void longjmp(struct jmpbuf *env, void * val) __attribute__((noreturn));
+void longjmp(struct jmpbuf *env, int val) __attribute__((noreturn));
 
 #endif /* !ROS_SETJMP_H */
index ffbcd91..eafedd4 100644 (file)
@@ -1,36 +1,3 @@
-typedef struct Conv    Conv;
-typedef struct Fs      Fs;
-typedef union  Hwaddr  Hwaddr;
-typedef struct IP      IP;
-typedef struct IPaux   IPaux;
-typedef struct Ipself  Ipself;
-typedef struct Ipselftab       Ipselftab;
-typedef struct Iplink  Iplink;
-typedef struct Iplifc  Iplifc;
-typedef struct Ipmulti Ipmulti;
-typedef struct IProuter IProuter;
-typedef struct Ipifc   Ipifc;
-typedef struct Iphash  Iphash;
-typedef struct Ipht    Ipht;
-typedef struct Netlog  Netlog;
-typedef struct Ifclog  Ifclog;
-typedef struct Medium  Medium;
-typedef struct Proto   Proto;
-typedef struct Arpent  Arpent;
-typedef struct Arp Arp;
-typedef struct Route   Route;
-
-typedef struct Routerparams    Routerparams;
-typedef struct         Hostparams      Hostparams;
-typedef struct         V6router        V6router;
-typedef struct V6params        V6params;
-
-#pragma incomplete Arp
-#pragma        incomplete Ifclog
-#pragma incomplete Ipself
-#pragma incomplete Ipselftab
-#pragma incomplete IP
-#pragma incomplete Netlog
 
 enum
 {
@@ -131,29 +98,29 @@ struct Medium
        int     mintu;          /* default min mtu */
        int     maxtu;          /* default max mtu */
        int     maclen;         /* mac address length  */
-       void    (*bind)(Ipifc*, int, char**);
-       void    (*unbind)(Ipifc*);
-       void    (*bwrite)(Ipifc *ifc, Block *b, int version, uchar *ip);
+       void    (*bind)(struct Ipifc*, int, char**);
+       void    (*unbind)(struct Ipifc*);
+       void    (*bwrite)(struct Ipifc *ifc, Block *b, int version, uchar *ip);
 
        /* for arming interfaces to receive multicast */
-       void    (*addmulti)(Ipifc *ifc, uchar *a, uchar *ia);
-       void    (*remmulti)(Ipifc *ifc, uchar *a, uchar *ia);
+       void    (*addmulti)(struct Ipifc *ifc, uchar *a, uchar *ia);
+       void    (*remmulti)(struct Ipifc *ifc, uchar *a, uchar *ia);
 
        /* process packets written to 'data' */
-       void    (*pktin)(struct Fs *f, Ipifc *ifc, Block *bp);
+       void    (*pktin)(struct Fs *f, struct Ipifc *ifc, Block *bp);
 
        /* routes for router boards */
-       void    (*addroute)(Ipifc *ifc, int, uchar*, uchar*, uchar*, int);
-       void    (*remroute)(Ipifc *ifc, int, uchar*, uchar*);
-       void    (*flushroutes)(Ipifc *ifc);
+       void    (*addroute)(struct Ipifc *ifc, int, uchar*, uchar*, uchar*, int);
+       void    (*remroute)(struct Ipifc *ifc, int, uchar*, uchar*);
+       void    (*flushroutes)(struct Ipifc *ifc);
 
        /* for routing multicast groups */
-       void    (*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia);
-       void    (*leavemulti)(Ipifc *ifc, uchar *a, uchar *ia);
+       void    (*joinmulti)(struct Ipifc *ifc, uchar *a, uchar *ia);
+       void    (*leavemulti)(struct Ipifc *ifc, uchar *a, uchar *ia);
 
        /* address resolution */
        void    (*ares)(struct Fs*, int, uchar*, uchar*, int, int);     /* resolve */
-       void    (*areg)(Ipifc*, uchar*);                        /* register */
+       void    (*areg)(struct Ipifc*, uchar*);                 /* register */
 
        /* v6 address generation */
        void    (*pref2addr)(uchar *pref, uchar *ea);
@@ -296,7 +263,7 @@ struct Proto
        int             (*state)(Conv*, char*, int);
        void            (*create)(Conv*);
        void            (*close)(Conv*);
-       void            (*rcv)(Proto*, Ipifc*, Block*);
+       void            (*rcv)(Proto*, struct Ipifc*, Block*);
        char*           (*ctl)(Conv*, char**, int);
        void            (*advise)(Proto*, Block*, char*);
        int             (*stats)(Proto*, char*, int);
@@ -547,7 +514,7 @@ struct Arpent
 extern void    arpinit(struct Fs*);
 extern int     arpread(Arp*, char*, ulong, int);
 extern int     arpwrite(struct Fs*, char*, int);
-extern Arpent* arpget(Arp*, Block *bp, int version, Ipifc *ifc, uchar *ip, uchar *h);
+extern Arpent* arpget(Arp*, Block *bp, int version, struct Ipifc *ifc, uchar *ip, uchar *h);
 extern void    arprelease(Arp*, Arpent *a);
 extern Block*  arpresolve(Arp*, Arpent *a, Medium *type, uchar *mac);
 extern void    arpenter(struct Fs*, int version, uchar *ip, uchar *mac, int len, int norefresh);
@@ -598,27 +565,27 @@ extern int        ipforme(struct Fs*, uchar *addr);
 extern int     iptentative(struct Fs*, uchar *addr);
 extern int     ipisbm(uchar *);
 extern int     ipismulticast(uchar *);
-extern Ipifc*  findipifc(struct Fs*, uchar *remote, int type);
+extern struct Ipifc*   findipifc(struct Fs*, uchar *remote, int type);
 extern void    findprimaryip(struct Fs*, uchar*);
 extern void    findlocalip(struct Fs*, uchar *local, uchar *remote);
-extern int     ipv4local(Ipifc *ifc, uchar *addr);
-extern int     ipv6local(Ipifc *ifc, uchar *addr);
-extern int     ipv6anylocal(Ipifc *ifc, uchar *addr);
-extern Iplifc* iplocalonifc(Ipifc *ifc, uchar *ip);
-extern int     ipproxyifc(struct Fs *f, Ipifc *ifc, uchar *ip);
+extern int     ipv4local(struct Ipifc *ifc, uchar *addr);
+extern int     ipv6local(struct Ipifc *ifc, uchar *addr);
+extern int     ipv6anylocal(struct Ipifc *ifc, uchar *addr);
+extern Iplifc* iplocalonifc(struct Ipifc *ifc, uchar *ip);
+extern int     ipproxyifc(struct Fs *f, struct Ipifc *ifc, uchar *ip);
 extern int     ipismulticast(uchar *ip);
 extern int     ipisbooting(void);
-extern int     ipifccheckin(Ipifc *ifc, Medium *med);
-extern void    ipifccheckout(Ipifc *ifc);
-extern int     ipifcgrab(Ipifc *ifc);
+extern int     ipifccheckin(struct Ipifc *ifc, Medium *med);
+extern void    ipifccheckout(struct Ipifc *ifc);
+extern int     ipifcgrab(struct Ipifc *ifc);
 extern void    ipifcaddroute(struct Fs*, int, uchar*, uchar*, uchar*, int);
 extern void    ipifcremroute(struct Fs*, int, uchar*, uchar*);
 extern void    ipifcremmulti(Conv *c, uchar *ma, uchar *ia);
 extern void    ipifcaddmulti(Conv *c, uchar *ma, uchar *ia);
-extern char*   ipifcrem(Ipifc *ifc, char **argv, int argc);
-extern char*   ipifcadd(Ipifc *ifc, char **argv, int argc, int tentative, Iplifc *lifcp);
+extern char*   ipifcrem(struct Ipifc *ifc, char **argv, int argc);
+extern char*   ipifcadd(struct Ipifc *ifc, char **argv, int argc, int tentative, Iplifc *lifcp);
 extern long    ipselftabread(struct Fs*, char *a, ulong offset, int n);
-extern char*   ipifcaddpref6(Ipifc *ifc, char**argv, int argc);
+extern char*   ipifcaddpref6(struct Ipifc *ifc, char**argv, int argc);
 extern void    ipsendra6(struct Fs *f, int on);
 
 /*
@@ -629,8 +596,8 @@ extern void icmpnoconv(struct Fs*, Block*);
 extern void    icmpcantfrag(struct Fs*, Block*, int);
 extern void    icmpttlexceeded(struct Fs*, uchar*, Block*);
 extern ushort  ipcsum(uchar*);
-extern void    ipiput4(struct Fs*, Ipifc*, Block*);
-extern void    ipiput6(struct Fs*, Ipifc*, Block*);
+extern void    ipiput4(struct Fs*, struct Ipifc*, Block*);
+extern void    ipiput6(struct Fs*, struct Ipifc*, Block*);
 extern int     ipoput4(struct Fs*, Block*, int, int, int, Conv*);
 extern int     ipoput6(struct Fs*, Block*, int, int, int, Conv*);
 extern int     ipstats(struct Fs*, char*, int);
@@ -643,13 +610,13 @@ extern ulong      restrict_mtu(uchar*, ulong);
 /*
  * bootp.c
  */
-char*  (*bootp)(Ipifc*);
+char*  (*bootp)(struct Ipifc*);
 int    (*bootpread)(char*, ulong, int);
 
 /*
  *  iprouter.c
  */
-void   useriprouter(struct Fs*, Ipifc*, Block*);
+void   useriprouter(struct Fs*, struct Ipifc*, Block*);
 void   iprouteropen(struct Fs*);
 void   iprouterclose(struct Fs*);
 long   iprouterread(struct Fs*, void*, int);
@@ -669,4 +636,4 @@ extern Chan*        chandial(char*, char*, char*, Chan**);
 /*
  *  global to all of the stack
  */
-extern void    (*igmpreportfn)(Ipifc*, uchar*);
+extern void    (*igmpreportfn)(struct Ipifc*, uchar*);
index 73c3e2c..7894bf3 100644 (file)
@@ -1602,7 +1602,7 @@ void __attribute__((noinline)) __longjmp_wrapper(struct jmpbuf* jb)
 {
        asm ("");
        printk("Starting: %s\n", __FUNCTION__);
-       longjmp(jb, (void *)1);
+       longjmp(jb, 1);
        // Should never get here
        printk("Exiting: %s\n", __FUNCTION__); 
 }