Add the Inferno license to files we got from Inferno
[akaros.git] / kern / src / net / arp.c
index 0970b90..4c1072b 100644 (file)
@@ -1,4 +1,31 @@
-// INFERNO
+/* Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
+ * Portions Copyright © 1997-1999 Vita Nuova Limited
+ * Portions Copyright © 2000-2007 Vita Nuova Holdings Limited
+ *                                (www.vitanuova.com)
+ * Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
+ *
+ * Modified for the Akaros operating system:
+ * Copyright (c) 2013-2014 The Regents of the University of California
+ * Copyright (c) 2013-2015 Google Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE. */
+
 #include <vfs.h>
 #include <kfs.h>
 #include <slab.h>
@@ -45,8 +72,6 @@ struct arp {
        struct block *dropf, *dropl;
 };
 
-char *Ebadarp = "bad arp";
-
 #define haship(s) ((s)[IPaddrlen-1]%NHASH)
 
 int ReTransTimer = RETRANS_TIMER;
@@ -424,7 +449,7 @@ int arpwrite(struct Fs *fs, char *s, int len)
        arp = fs->arp;
 
        if (len == 0)
-               error(Ebadarp);
+               error(EINVAL, NULL);
        if (len >= sizeof(buf))
                len = sizeof(buf) - 1;
        strncpy(buf, s, len);
@@ -456,7 +481,7 @@ int arpwrite(struct Fs *fs, char *s, int len)
        } else if (strcmp(f[0], "add") == 0) {
                switch (n) {
                        default:
-                               error(Ebadarg);
+                               error(EINVAL, NULL);
                        case 3:
                                parseip(ip, f[1]);
                                if (isv4(ip))
@@ -464,26 +489,26 @@ int arpwrite(struct Fs *fs, char *s, int len)
                                else
                                        r = v6lookup(fs, ip, NULL);
                                if (r == NULL)
-                                       error("Destination unreachable");
+                                       error(EHOSTUNREACH, "Destination unreachable");
                                m = r->rt.ifc->m;
                                n = parsemac(mac, f[2], m->maclen);
                                break;
                        case 4:
                                m = ipfindmedium(f[1]);
                                if (m == NULL)
-                                       error(Ebadarp);
+                                       error(EINVAL, NULL);
                                parseip(ip, f[2]);
                                n = parsemac(mac, f[3], m->maclen);
                                break;
                }
 
                if (m->ares == NULL)
-                       error(Ebadarp);
+                       error(EINVAL, NULL);
 
                m->ares(fs, V6, ip, mac, n, 0);
        } else if (strcmp(f[0], "del") == 0) {
                if (n != 2)
-                       error(Ebadarg);
+                       error(EINVAL, NULL);
 
                parseip(ip, f[1]);
                qlock(&arp->qlock);
@@ -518,7 +543,7 @@ int arpwrite(struct Fs *fs, char *s, int len)
                }
                qunlock(&arp->qlock);
        } else
-               error(Ebadarp);
+               error(EINVAL, NULL);
 
        return len;
 }
@@ -681,7 +706,7 @@ static void rxmitproc(void *v)
                if (wakeupat == 0)
                        rendez_sleep(&arp->rxmtq, rxready, v);
                else if (wakeupat > ReTransTimer / 4)
-                       udelay_sched(wakeupat * 1000);
+                       kthread_usleep(wakeupat * 1000);
        }
        poperror();
 }