projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
convert kinfo_rtable to sysctl_rtable
[unix-history]
/
usr
/
src
/
sys
/
net
/
rtsock.c
diff --git
a/usr/src/sys/net/rtsock.c
b/usr/src/sys/net/rtsock.c
index
bfd5e8b
..
9f00d9f
100644
(file)
--- a/
usr/src/sys/net/rtsock.c
+++ b/
usr/src/sys/net/rtsock.c
@@
-4,7
+4,7
@@
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)rtsock.c 7.3
1
(Berkeley) %G%
+ * @(#)rtsock.c 7.3
2
(Berkeley) %G%
*/
#include <sys/param.h>
*/
#include <sys/param.h>
@@
-634,11
+634,10
@@
rt_newaddrmsg(cmd, ifa, error, rt)
}
}
}
}
-#include <sys/kinfo.h>
/*
/*
- * This is used in dumping the kernel table via
getkinfo
().
+ * This is used in dumping the kernel table via
sysctl
().
*/
*/
-
rt
_dumpentry(rn, w)
+
sysctl
_dumpentry(rn, w)
struct radix_node *rn;
register struct walkarg *w;
{
struct radix_node *rn;
register struct walkarg *w;
{
@@
-647,7
+646,7
@@
rt_dumpentry(rn, w)
int n, error = 0, size;
struct rt_addrinfo info;
int n, error = 0, size;
struct rt_addrinfo info;
- if (w->w_op ==
KINFO
_RT_FLAGS && !(rt->rt_flags & w->w_arg))
+ if (w->w_op ==
NET
_RT_FLAGS && !(rt->rt_flags & w->w_arg))
return 0;
bzero((caddr_t)&info, sizeof(info));
dst = rt_key(rt);
return 0;
bzero((caddr_t)&info, sizeof(info));
dst = rt_key(rt);
@@
-672,7
+671,7
@@
rt_dumpentry(rn, w)
return (error);
}
return (error);
}
-
kinfo
_iflist(af, w)
+
sysctl
_iflist(af, w)
int af;
register struct walkarg *w;
{
int af;
register struct walkarg *w;
{
@@
-727,47
+726,57
@@
kinfo_iflist(af, w)
return (0);
}
return (0);
}
-kinfo_rtable(op, where, given, arg, needed)
- int op, arg;
+sysctl_rtable(name, namelen, where, given, new, newlen)
+ int *name;
+ int namelen;
caddr_t where;
caddr_t where;
- int *given, *needed;
+ int *given;
+ caddr_t *new;
+ int newlen;
{
register struct radix_node_head *rnh;
int i, s, error = EINVAL;
{
register struct radix_node_head *rnh;
int i, s, error = EINVAL;
- u_char af
= ki_af(op)
;
+ u_char af;
struct walkarg w;
struct walkarg w;
+ if (new)
+ return (EPERM);
+ if (namelen != 3)
+ return (EINVAL);
+ af = name[0];
Bzero(&w, sizeof(w));
Bzero(&w, sizeof(w));
- if ((w.w_where = where) && given)
-
w.w_given = *given;
+ w.w_where = where;
+ w.w_given = *given;
w.w_needed = 0 - w.w_given;
w.w_needed = 0 - w.w_given;
- w.w_
arg = arg
;
- w.w_
op = op = ki_op(op)
;
+ w.w_
op = name[1]
;
+ w.w_
arg = name[2]
;
s = splnet();
s = splnet();
- switch (op) {
+ switch (
w.w_
op) {
- case
KINFO
_RT_DUMP:
- case
KINFO
_RT_FLAGS:
+ case
NET
_RT_DUMP:
+ case
NET
_RT_FLAGS:
for (i = 1; i <= AF_MAX; i++)
if ((rnh = rt_tables[i]) && (af == 0 || af == i) &&
(error = rnh->rnh_walk(rnh->rnh_treetop,
for (i = 1; i <= AF_MAX; i++)
if ((rnh = rt_tables[i]) && (af == 0 || af == i) &&
(error = rnh->rnh_walk(rnh->rnh_treetop,
-
rt
_dumpentry, &w)))
+
sysctl
_dumpentry, &w)))
break;
break;
break;
break;
- case
KINFO
_RT_IFLIST:
- error =
kinfo
_iflist(af, &w);
+ case
NET
_RT_IFLIST:
+ error =
sysctl
_iflist(af, &w);
}
splx(s);
if (w.w_tmem)
free(w.w_tmem, M_RTABLE);
w.w_needed += w.w_given;
}
splx(s);
if (w.w_tmem)
free(w.w_tmem, M_RTABLE);
w.w_needed += w.w_given;
- if (where
&& given)
+ if (where
) {
*given = w.w_where - where;
*given = w.w_where - where;
- else
- w.w_needed = (11 * w.w_needed) / 10;
- *needed = w.w_needed;
+ if (*given < w.w_needed)
+ return (ENOMEM);
+ } else {
+ *given = (11 * w.w_needed) / 10;
+ }
return (error);
}
return (error);
}
@@
-783,6
+792,7
@@
struct protosw routesw[] = {
raw_input, route_output, raw_ctlinput, 0,
route_usrreq,
raw_init, 0, 0, 0,
raw_input, route_output, raw_ctlinput, 0,
route_usrreq,
raw_init, 0, 0, 0,
+ sysctl_rtable,
}
};
}
};