bug fixes for LEASES from Rick Macklem
[unix-history] / usr / src / sys / kern / uipc_domain.c
index 9f22443..5f679c3 100644 (file)
@@ -2,33 +2,26 @@
  * Copyright (c) 1982, 1986 Regents of the University of California.
  * All rights reserved.
  *
  * Copyright (c) 1982, 1986 Regents of the University of California.
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * %sccs.include.redist.c%
  *
  *
- *     @(#)uipc_domain.c       7.5 (Berkeley) %G%
+ *     @(#)uipc_domain.c       7.16 (Berkeley) %G%
  */
 
  */
 
-#include "param.h"
-#include "socket.h"
-#include "protosw.h"
-#include "domain.h"
-#include "mbuf.h"
-#include "time.h"
-#include "kernel.h"
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/protosw.h>
+#include <sys/domain.h>
+#include <sys/mbuf.h>
+#include <sys/time.h>
+#include <sys/kernel.h>
+#include <sys/proc.h>
+#include <vm/vm.h>
+#include <sys/sysctl.h>
 
 #define        ADDDOMAIN(x)    { \
 
 #define        ADDDOMAIN(x)    { \
-       extern struct domain x/**/domain; \
-       x/**/domain.dom_next = domains; \
-       domains = &x/**/domain; \
+       extern struct domain __CONCAT(x,domain); \
+       __CONCAT(x,domain.dom_next) = domains; \
+       domains = &__CONCAT(x,domain); \
 }
 
 domaininit()
 }
 
 domaininit()
@@ -36,6 +29,7 @@ domaininit()
        register struct domain *dp;
        register struct protosw *pr;
 
        register struct domain *dp;
        register struct protosw *pr;
 
+#undef unix
 #ifndef lint
        ADDDOMAIN(unix);
        ADDDOMAIN(route);
 #ifndef lint
        ADDDOMAIN(unix);
        ADDDOMAIN(route);
@@ -48,6 +42,9 @@ domaininit()
 #ifdef ISO
        ADDDOMAIN(iso);
 #endif
 #ifdef ISO
        ADDDOMAIN(iso);
 #endif
+#ifdef CCITT
+       ADDDOMAIN(ccitt);
+#endif
 #include "imp.h"
 #if NIMP > 0
        ADDDOMAIN(imp);
 #include "imp.h"
 #if NIMP > 0
        ADDDOMAIN(imp);
@@ -114,6 +111,43 @@ found:
        return (maybe);
 }
 
        return (maybe);
 }
 
+net_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
+       int *name;
+       u_int namelen;
+       void *oldp;
+       size_t *oldlenp;
+       void *newp;
+       size_t newlen;
+       struct proc *p;
+{
+       register struct domain *dp;
+       register struct protosw *pr;
+       int family, protocol;
+
+       /*
+        * All sysctl names at this level are nonterminal;
+        * next two components are protocol family and protocol number,
+        * then at least one addition component.
+        */
+       if (namelen < 3)
+               return (EISDIR);                /* overloaded */
+       family = name[0];
+       protocol = name[1];
+
+       if (family == 0)
+               return (0);
+       for (dp = domains; dp; dp = dp->dom_next)
+               if (dp->dom_family == family)
+                       goto found;
+       return (ENOPROTOOPT);
+found:
+       for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
+               if (pr->pr_protocol == protocol && pr->pr_sysctl)
+                       return ((*pr->pr_sysctl)(name + 2, namelen - 2,
+                           oldp, oldlenp, newp, newlen));
+       return (ENOPROTOOPT);
+}
+
 pfctlinput(cmd, sa)
        int cmd;
        struct sockaddr *sa;
 pfctlinput(cmd, sa)
        int cmd;
        struct sockaddr *sa;