Have #ip protocol's bind()s throw errors
[akaros.git] / kern / src / net / ipifc.c
index cef9360..eea8d2a 100644 (file)
@@ -132,26 +132,26 @@ struct medium *ipfindmedium(char *name)
  *  attach a device (or pkt driver) to the interface.
  *  called with c locked
  */
-static char *ipifcbind(struct conv *c, char **argv, int argc)
+static void ipifcbind(struct conv *c, char **argv, int argc)
 {
        ERRSTACK(1);
        struct Ipifc *ifc;
        struct medium *m;
 
        if (argc < 2)
-               return errno_to_string(EINVAL);
+               error(EINVAL, "Too few args (%d) to %s", argc, __func__);
 
        ifc = (struct Ipifc *)c->ptcl;
 
        /* bind the device to the interface */
        m = ipfindmedium(argv[1]);
        if (m == NULL)
-               return "unknown interface type";
+               error(EFAIL, "unknown interface type");
 
        wlock(&ifc->rwlock);
        if (ifc->m != NULL) {
                wunlock(&ifc->rwlock);
-               return "interface already bound";
+               error(EFAIL, "interfacr already bound");
        }
        if (waserror()) {
                wunlock(&ifc->rwlock);
@@ -193,8 +193,6 @@ static char *ipifcbind(struct conv *c, char **argv, int argc)
 
        wunlock(&ifc->rwlock);
        poperror();
-
-       return NULL;
 }
 
 /*
@@ -688,7 +686,7 @@ void ipifcremroute(struct Fs *f, int vers, uint8_t * addr, uint8_t * mask)
  *  addresses.  This is a macro that means, remove all the old interfaces
  *  and add a new one.
  */
-static char *ipifcconnect(struct conv *c, char **argv, int argc)
+static void ipifcconnect(struct conv *c, char **argv, int argc)
 {
        ERRSTACK(1);
        char *err;
@@ -697,7 +695,7 @@ static char *ipifcconnect(struct conv *c, char **argv, int argc)
        ifc = (struct Ipifc *)c->ptcl;
 
        if (ifc->m == NULL)
-               return "ipifc not yet bound to device";
+               error(EFAIL, "ipifc not yet bound to device");
 
        wlock(&ifc->rwlock);
        if (waserror()) {
@@ -709,16 +707,9 @@ static char *ipifcconnect(struct conv *c, char **argv, int argc)
        wunlock(&ifc->rwlock);
        poperror();
 
-       if (waserror()) {
-               poperror();
-               return current_errstr();
-       }
        ipifcadd(ifc, argv, argc, 0, NULL);
-       poperror();
 
        Fsconnected(c, NULL);
-
-       return NULL;
 }
 
 static void ipifcsetpar6(struct Ipifc *ifc, char **argv, int argc)