Have #ip protocol's announce()s throw errors
authorBarret Rhoden <brho@cs.berkeley.edu>
Sat, 13 Feb 2016 17:16:20 +0000 (12:16 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sun, 14 Feb 2016 14:03:21 +0000 (09:03 -0500)
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/ip.h
kern/src/net/devip.c
kern/src/net/icmp.c
kern/src/net/icmp6.c
kern/src/net/tcp.c
kern/src/net/udp.c

index f1005ad..797bb1e 100644 (file)
@@ -290,7 +290,7 @@ struct Proto {
        int ipproto;                            /* ip protocol type */
 
        void (*connect)(struct conv *, char **, int);
-       char *(*announce) (struct conv *, char **unused_char_pp_t, int);
+       void (*announce)(struct conv *, char **, int);
        char *(*bind) (struct conv *, char **unused_char_pp_t, int);
        int (*state) (struct conv *, char *unused_char_p_t, int);
        void (*create) (struct conv *);
@@ -389,7 +389,7 @@ struct conv *Fsprotoclone(struct Proto *, char *unused_char_p_t);
 struct Proto *Fsrcvpcol(struct Fs *, uint8_t unused_uint8_t);
 struct Proto *Fsrcvpcolx(struct Fs *, uint8_t unused_uint8_t);
 void Fsstdconnect(struct conv *, char **, int);
-char *Fsstdannounce(struct conv *, char **unused_char_pp_t, int);
+void Fsstdannounce(struct conv *, char **, int);
 char *Fsstdbind(struct conv *, char **unused_char_pp_t, int);
 void Fsconvnonblock(struct conv *, bool);
 uint32_t scalednconv(void);
index bc862da..390da16 100644 (file)
@@ -1058,25 +1058,17 @@ static void connectctlmsg(struct Proto *x, struct conv *c, struct cmdbuf *cb)
 /*
  *  called by protocol announce routine to set addresses
  */
-char *Fsstdannounce(struct conv *c, char *argv[], int argc)
+void Fsstdannounce(struct conv *c, char *argv[], int argc)
 {
-       ERRSTACK(1);
-
        memset(c->raddr, 0, sizeof(c->raddr));
        c->rport = 0;
        switch (argc) {
                default:
-                       return "bad args to announce";
+                       error(EINVAL, "bad args to announce");
                case 2:
-                       if (waserror()) {
-                               poperror();
-                               return current_errstr();
-                       }
                        setladdrport(c, argv[1], 1);
-                       poperror();
                        break;
        }
-       return 0;
 }
 
 /*
@@ -1098,9 +1090,7 @@ static void announcectlmsg(struct Proto *x, struct conv *c, struct cmdbuf *cb)
        c->cerr[0] = '\0';
        if (x->announce == NULL)
                error(EFAIL, "announce not supported");
-       p = x->announce(c, cb->f, cb->nf);
-       if (p != NULL)
-               error(EFAIL, p);
+       x->announce(c, cb->f, cb->nf);
 
        qunlock(&c->qlock);
        if (waserror()) {
index b8e3400..ee04d2f 100644 (file)
@@ -167,16 +167,10 @@ extern int icmpstate(struct conv *c, char *state, int n)
                                        c->rq ? qlen(c->rq) : 0, c->wq ? qlen(c->wq) : 0);
 }
 
-extern char *icmpannounce(struct conv *c, char **argv, int argc)
+void icmpannounce(struct conv *c, char **argv, int argc)
 {
-       char *e;
-
-       e = Fsstdannounce(c, argv, argc);
-       if (e != NULL)
-               return e;
+       Fsstdannounce(c, argv, argc);
        Fsconnected(c, NULL);
-
-       return NULL;
 }
 
 extern void icmpclose(struct conv *c)
index 01948fa..3b2c23b 100644 (file)
@@ -941,7 +941,7 @@ int icmpstats6(struct Proto *icmp6, char *buf, int len)
 
 // need to import from icmp.c
 extern int icmpstate(struct conv *c, char *state, int n);
-extern char *icmpannounce(struct conv *c, char **argv, int argc);
+extern void icmpannounce(struct conv *c, char **argv, int argc);
 extern void icmpconnect(struct conv *c, char **argv, int argc);
 extern void icmpclose(struct conv *c);
 
index 8ae2be2..b4882e2 100644 (file)
@@ -494,17 +494,11 @@ static int tcpinuse(struct conv *c)
        return s->state != Closed;
 }
 
-static char *tcpannounce(struct conv *c, char **argv, int argc)
+static void tcpannounce(struct conv *c, char **argv, int argc)
 {
-       char *e;
-
-       e = Fsstdannounce(c, argv, argc);
-       if (e != NULL)
-               return e;
+       Fsstdannounce(c, argv, argc);
        tcpstart(c, TCP_LISTEN);
        Fsconnected(c, NULL);
-
-       return NULL;
 }
 
 /*
index 001515f..9d6b8bb 100644 (file)
@@ -164,19 +164,14 @@ static int udpstate(struct conv *c, char *state, int n)
                                        c->rq ? qlen(c->rq) : 0, c->wq ? qlen(c->wq) : 0);
 }
 
-static char *udpannounce(struct conv *c, char **argv, int argc)
+static void udpannounce(struct conv *c, char **argv, int argc)
 {
-       char *e;
        Udppriv *upriv;
 
        upriv = c->p->priv;
-       e = Fsstdannounce(c, argv, argc);
-       if (e != NULL)
-               return e;
+       Fsstdannounce(c, argv, argc);
        Fsconnected(c, NULL);
        iphtadd(&upriv->ht, c);
-
-       return NULL;
 }
 
 static void udpcreate(struct conv *c)